In a form schema, the fieldsets are rendered as tabs. So the "trick" would be to define several fieldsets and assign fields to those fieldsets. I don't know if that's possible with the userschema.xml, but I would expect that it is.
Following up on this. I want to pull this off next month. I'll put in the time, but will need some pointers along the way. I think I need a few check-ins with someone with right amount of Volto and Plone experience.
I've made some initial progress by customising components/manage/Preferences/PersonalInformation.jsx
Currently I'm hardcoding fields to showup under hardcoded tabs. It works for a quick proof of concept.
Now that I know it works, I'm switching to use semantic-ui. For this project, hardcoding in the frontend is likely good enough. Eventually, it might be nice to abstract this so that it could be defined along with the userschema.xml.