How is it rude and dismissive?
Specifically in reference to how you blew him off with your initial reply.
How do you physically detect a finger hovering over a button using touch-screen devices? You can't.
Correct - most devices can't (I know some Samsung devices can). The idea that the property implies is that you want to query if the input in question was over a UI element. And that is a perfectly reasonable question to ask the system.
Similarly, how is "is over UI" check supposed to work with you have more than one active touch, one is interacting with UI and the other does not? Which one should be checked to be is over UI? Keep in mind if you need this functionality with touch-screen devices, then you can always loop through active touches: UICamera.activeTouches. Each of those has a "pressed" object set which tells you the game object where the touch started.
Quite simply, the property would be true if any touch was over a UI element. Once again, that seems very reasonable. Sure, there could be additional methods to determine which one, if we care, but I digress.
Using NGUI input is necessary because it ensures that NGUI's events are filtered properly, going to whatever is on top and preventing whatever is below the widgets from receiving events. You know, the stuff you now have to do manually using the "is over" checks.
Using NGUI system all the way removes the need to do it entirely -- that's exactly the point.
Thinking that the UI system would govern gameplay is incredibly naive, limiting, and also just flat out bad engineering (due to unnecessary coupling).
Now, of course, there is a simple solution to all of this, but the frustrating part was the the behaviour of IsOverUI changed dramatically.
For anyone that does want to find out if the input is over the UI, it's pretty simple, but it does involve a raycast, which is expensive, so clearly you want some gating logic before it gets to this point:
if (Input.touchCount > 0 && UICamera.Raycast(Input.GetTouch(0).position)) {
// Do something or nothing if we are over the UI
return;
}