I don't see a lot of uses for before-unmount, but before-uninstantiate should be responsible for deleting all data associated with the package instance (meaning for forums all forums, messages, attachments, notifications etc).
before-uninstall should be responsible for dropping things in the db
which the package creates which need to be dropped (or are easier to drop)
via tcl APIs; an example might be service contract implementations.
In general looking at the error log for which constraint name is preventing the drop is the best way to track down which objects need to be deleted.
I think also looking at the package dependencies can be a guide to
which things need to be deleted.
btw, Great diagram.