A: 

A simpler approach...

I'm assuming that the saves to the object tree happen in a transaction. You could modify the audit tables to also add some unique identifier for each transaction.

That way you would be able to browse the audit history as a collection of change sets - e.g. see all changes made in a single transaction.

Not quite what you are asking for but would be a lot easier to achieve and give many of the benefits. What you are asking for would be very complicated to implement.

Pablojim
I implemented a messy solution using the http://code.google.com/p/reflections/ library to detect the auditable objects and iterating through the collection. It fulfills the requirement at the moment, before the new version of Envers is released.
Hypnos