It's a tricky thing. If you're inside an OnEnable, it means that the gameobject has just been made active. And this means, that if it has been made active by NGUITools.SetActive, it's children will be set active AFTER you finish that OnEnable. This means, if you mess with the children of this object's active state, it will get overridden afterwards when the "big" OnEnable gets to traverse the rest of the hierarchy.
One way to get around it is to use SetActiveRecursively which starts by enabling children.
Another is to set some bools instead, and mess with the active state in Update()
You suggested Coroutines which can also be used.
You can also use Invoke with a tiny timedelay, although that feels dirty.
Alternatively, you can just use myPanel.gameObject.active = true and let the panel have a script with OnEnable that sets everything up for you with references to children and whatnot.