So I did some tests with JBoss 7.1.3: I set the connection pool to allow at most 1 connection to the database and created an EJB method that performs a database operation and waits for 30 seconds before returning to the caller.
I found out that in a transactional EJB method (e.g. where TransactionalAttribute is REQUIRED), the connection is not given to other clients during the whole transaction (just as I need). On the other hand, if there is no active transaction, the connection is released as soon as the JPA call ends, before the EJB method returns.
It looks like it is possible to do what I want (as long as I ensure that a transaction is active), but I don't know if this behavior is an implementation detail or if it is expected to be like this per the specification...