So, zeuxcg provided some input on this recently:
ZIndex is definitely removable, but I posted on that thread that the solution was to implement your second point. It’s super annoying to have children parented under ancestors every time you insert one, and that’s something that should automatically be fixed. If that was the case there’d be no need for more ZIndex values because with that setup you’d rarely go over 10. However, now that you mention Advanced Objects, I’m not sure this is the best solution.
Perhaps a better solution is to remove the cap on ZIndex (no need to arbitrarily limit if the limit can be removed) but also for GUI instances inserted through Advanced Objects to automatically have their ZIndex assigned to their parent’s. This would alleviate that issue, while also still allowing you to manually layer children under ancestors without having to use negative ZIndex values. If ZIndex values have no upper bounds, this would likely solve all issues regarding them.
The only issue I could foresee is inserting children to a frame, and then wanting to lower the parent’s ZIndex. This is actually an issue even currently. Now your children wouldn’t be layered as they were before – they’d still be on top, but not the same distance from the parent that they were before. If you automatically adjust the children ZIndex values when the parent’s changes from the property window though, you might cause unwanted frustration when the goal was to increase the distance between parent and children. @zeuxcg any thoughts on this?