Right now, a users /home/jovyan is stored inside their respective container.
What that means is that if a user wants to update their base image, or use an entirely different one, they're going to lose all their data.
The most obvious solution for this to me is:
For every user, create a "storage-$USERNAME" container from a configured, very basic, nearly empty image, that has /home/jovyan as a volume.
Then create every users actual containers with "--volumes-from storage-$USERNAME".