Well, you must be careful about what you exactly want to persist because of update issues. Of course you can persist more and more files in docker volumes, shared drives etc. and disable that they are deleted. But then if you want to update the old user environments on your server, you run into issues as described in Run a specific script .
Other way round: Why are you frequently restarting the server?
Third option: If it is a small JupyterHub, maybe you could maintain individual docker containers for each user? You can create if-else-branches in your configuration like in How to enable user specific kernels like PY2, PY3 and R in Jupyterhub