I'm not sure you understood the description of the original problem, which appears to be a Unity bug.
I have the "UI Root (2D)" standard NGUI hierarchy in my scene. There is a UIPanel in there that I want to drag a prefab onto. The prefab consists of NGUI elements, including sprites and UIImageButtons, but doesn't have a UIPanel at its root because I plan on using the on already in the scene's hierarchy. However, when dragging the prefab onto the existing UIPanel object, the new object (from the prefab) ends up with another UIPanel on it. After some investigation, here's what's happening.
1. The new object is instantiated at the root of the project by Unity.
2. The OnEnable() function is called in UIImageButton.
3. UIImageButton makes a call to MakePixelPerfect().
4. MakePixelPerfect looks for the rendering UIPanel for sprites on the UIImageButton.
5. Since the new object is in the root, it doesn't find a UIPanel and creates one.
6. Eventually, Unity moves the new object to the final place in the hierarchy (the object you dropped the prefab onto).
7. Now your object has a UIPanel on it even though it's under another UIPanel.