https://pgbouncer.github.io/usage.html
https://pgbouncer.github.io/config.html#description
Transaction pooling
A server connection is assigned to client only during a transaction. When PgBouncer notices that transaction is over, the server connection will be put back into the pool.
In your case if transaction is never ended (commited, rolled back) it will hit idle_transaction_timeout
(default disabled) and idle in transaction
connection will go back to pool, allowing others to connect. If you have the default value for it, at some point all connection pool will be filled, so new will be rejected. From this point you single statements won't work - they will wait for free connection that never appears.
Regarding single statements - they are not "transformed to transactions by pgbounce" neither "in transaction pooling, every command is a transaction by itself". This is controlled by AUTOCOMMIT
for each session.