User events has the advantage of not needing to exist for code calling them to compile, so if some code only needs to happen for some objects in a hierarchy, they're useful to cut down on boilerplate code.
I still find them much simpler for the "function inheritance" style model because you can use event_inherited to call the parent event directly instead of having to worry about what name a function has at each level of the hierarchy or finding temporary names for functions or rewriting the functions at each level.