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
2010-07-28 21:42:25