vis_contents don't care if you can't see their parent at the least in the screen.
mob/Login()
var/obj/o = new()
o.invisibility = 101
o.screen_loc = "1,1"
o.vis_contents += new/obj{icon='test.dmi'}()
client.screen += o
One would expect that since you can't see the root object due to it being invisible, its vis_children would also not be visible. This is not the case.
Perhaps later some control over this would be nice using some kind of flag hinting system, but at the moment it makes quickly hiding compound UI objects really obnoxious. Especially since I use screen order for drawing order.