Hidden or not, a label is always copied along with the control or indicator since the label is part of it and not a separate object. If you copy something with it's label not visible, that label is there in the new VI - you just have to select Visible Items>Label to see it.
There isn't a function to unhide all labels but you can do it programmatically. I have attached a VI that illustrates how to do it.
The behavior you are experiencing seems strange. When you move a control with a visible label to another VI, it should stay visible on the new VI. Does this always happen? What version of LabVIEW are you using?