I'll admit that I've never found a use for it myself.
It runs when Node-RED starts so that is only once. There is no direct carry-over from on start to the main function so, yes, you need to use context/flow/global variables in order to pass data over.
For the same reason they are not carried between successive on message events. On start is just an initial event which is automatically triggered on startup.
Either what you state is not entirely correct or the documentation is wrong:
Writing Functions : Node-RED states
"[...] the Function node provides an On Start tab [..] where you can provide code that will run whenever the node is started."
I understand it would also run upon redeployment of a node.
I don't think that is correct.
Run node-red-log in one window and in a different window run sudo systemctl stop nodered and see what appears in the log window.