Johannes,
This is a problem we've been facing as well, e.g. in testing: how long do you wait for an async execution to end? There's no mechanism in jBPM 3 (as far as I know) to be notified that such an execution has ended, and determining the end of the execution is somewhat non-deterministic - it would take into account the time used for scheduling the async command(s) and executing the corresponding code.
One mechanism available in Hibernate is to register a hook (an implementation of Synchronization) to the async transaction (something I tried to explain here: http://community.jboss.org/message/399790#399790), but that only works if you are able to set up that hook.
An approach we've been using as well is to simply poll for the async execution to be ended (using relative short cycles with sleeps in between). I would agree if you'd say that's just butt-ugly, but we've found it works for us - lacking a better solution.
Regards,
Maurice