I do not know if this is intended behaviour or not; but you are playing on two levels here:
1) The visibility of a GuiElement is set in general with GuiElement.setVisibility(boolean)
2) the visibility of a GuiElement is set for a specific player with Player.setGuiElementVisible(boolean)
The documentation for Player.setGuiElementVisible() says:
"calling this method ignores the current visibility state of the GUI element (see GuiElement.setVisible(boolean)). However, changes to the GUI element itself will restore the original visibility value of the GUI element."
So, it seems to me that:
A) if you set off the (general) visibility of several GuiElement's, you need to turn it on for each GuiElement (and for each player). Are you turning off the (general) visibility of the panel parent only or of the panel children too? If the latter, then the need to turn it on for each child is clearly intended behaviour.
B) On another plan, of course if you add the same panel child to all players, it will have the same content for each player. Not knowing what you are trying to achieve, I have no idea if this is correct or not; in most cases, the contents shown to each player is player-specific. So, you may want to examine this point.
____________________
Making Player.setGuiElementVisible(boolean) recursive:
I am not sure this would be generally preferable. For instance, assuming you create a dialogue box with some (rare or secondary) options turned invisible; when you turn the whole dialogue boxvisible, you do not want those options becoming visible.
As GUI elements are by default visible and a call is needed to make them invisible, if such a call is made, I think it should be honoured when changing the visibility of the parent (my opinion, though).