There are a few functions in the APP.py that you could try.
For STMenu there are:
STMenu.SetOpened = new.instancemethod(Appc.STMenu_SetOpened, None, STMenu)
STMenu.ClearOpened = new.instancemethod(Appc.STMenu_ClearOpened, None, STMenu)
STMenu.IsOpened = new.instancemethod(Appc.STMenu_IsOpened, None, STMenu)
[...]
STMenu.ForceUpdate = new.instancemethod(Appc.STMenu_ForceUpdate, None, STMenu)
STMenu.Open = new.instancemethod(Appc.STMenu_Open, None, STMenu)
STMenu.Close = new.instancemethod(Appc.STMenu_Close, None, STMenu)
STMenu.ResizeToContents = new.instancemethod(Appc.STMenu_ResizeToContents, None, STMenu)
The forceUpdate function may be something to look into.
Another other method you could try is:
TGUIObject.Layout = new.instancemethod(Appc.TGUIObject_Layout, None, TGUIObject)
That should work on the menu as well.
If none of those work, calling remove and prepend like you suggested should also work.
If that is only to be done when the player changes the ship, you should use an event-listener (BroadcastPythonFuncHandler) instead of a timer.
Look e.g., at the Emergency Repair (ESR.py) for that.
Err, looking at that right now, It seems that what happens in "def GameRestart()" is actually removing and rebuilding the entire menu, like you suggested earlier.