I think there might be some confusion in this thread - or I am confused

from what I understand you would like an event to be broad cast to any listeners.
The benefit being that the broadcaster does not need to know who or how many listeners are listening, enabling decoupled code.
As an example:
You press the power up button, it sends the message and you might have multiple systems listening for the message. GUI manager to which provides a visual effect, audio manager which plays an audio effect, power up manager who puts the power up on cool-down, player controller which might start running double speed.
There is multiple ways to do this:
BroadcastNGUITools.Broadcast("OnPowerUp", doubleSpeedPowerUp);
Using broadcast is the easiest way which will send to to all scripts on all game objects which has a function signature that matches, but I assume this is slow.
Send MessageSendMessage or UIButtonMessage, only problem is that the broadcaster needs to know who it sends it too. Which is not really what your after.
target.SendMessage("PowerUp", "Speed Boost");
Event ManagerUICamera.genericEventHandler, which you can set up a event manager which gets all events in the game, you need then specific what it does depending on what object was hit.
OnClick(object) {
if(object == "Power Up Button") PowerUpEvent();
}
You could set up loads of specific events, have listeners subscribe to those events (using delegates and events) or set up one event and have it send through a packet with all the data and each listener determines what to do with it or ignore it.
HardcodeHard code it all with direct links to other objects, but not what you want, as decoupled is much nicer.
PowerUpManager.UsePowerUp("Speed Boost")
Notification Center NotificationCenter which you can subscribe broadcasters and listeners, this is likely the best and most performance efficient way, but at the same time would be a lot of work.
http://wiki.unity3d.com/index.php/Scripts/GeneralLook at the messaging system for lots of examples.
Now I hope I did understand the question, also I am not confident enough to say that what I have previously said is right or even a valid approach. As it is, I am still hitting my head trying to decide the nicest way of decoupling my code (along with making it reusable and dynamic). So I would love some more input from anyone who has a more experience on how best handle NGUI.