I find them intuitive for (certain) communication between code modules.
One thing bugs me though. If I decide to keep the Event private to a certain module and only release a pre-registered User Event (registered for each listener) careless code can bring the entire communication to a halt. The bare User Event refnum (pre-registration if you wish) is exposed within the Event Structure. I have yet to understand wha this is but whatever the reason, it essentially means that it's a serious problem for 1 to n communication. If one of the n listeners decides to destroy the user event, communication to ALL listeners is destroyed.
I wish we could set the User Event refnum to being private so that it would NOT be exposed within the Event Structure.