Ich würde die Klassen TTabsheet & TPageControl ganz in Ruhe lassen und die Logik in eine eigene Klasse verlagern.
Damit erspart man sich einige Probleme.
Anstatt also im Code bestimmte TabSheets über Property TabVisible zu ändern "sagst" du das der neuen Stellvertreter-Klasse.
Delphi-Quellcode:
type
TPageUserController = class(TObject)
public
property Pagecontrol: TPageControl
procedure SetTabVisible(tab:TTabSheet; Visible:Boolean);
procedure SetUserVisible(tab:TTabSheet; Visible:Boolean);
end;
Pro Tabsheet benötigt diese Klasse 2 Booleans, die die Infos zwischenspeichern.