I might be missing some magic Unity-feature but...
One thing I've been having alot of problem with is adding custom behaviour to NGUI-Components without changing any NGUI-code. Many times I'm in desperate need to add additional behaviour to something (e.g. UIDraggablePanel), but inheriting from this class won't give access to either Awake, Start or LateUpdate without hiding the baseclass-methods, so I'm completely crippled. Sure I can manually make the methods virtual in UIDraggablePanel, but I don't want to do this even if my life depended on it since this will give me hell later when I update NGUI.
Until now I've pretty much used whatever's been available and sometimes even duplicated NGUI code to not break anything, but it shouldn't be this much hassle. I know it's a boring task for you to change all 87 or so UI-classes you have (find-and-replace might to the trick?), but I really believe it's necessary to allow some flexability. As I said, there is almost always workarounds, but since each workaround is different from the other, it ends up in some inconsistent spagetti-code. Also, making them virtual protected won't break ANYTHING!

Anyways, cheers!
