The problem with Joomla is that there are just in-built fields connected to the following content types: Articles, Categories, Users, User Groups. There are also ones connected to banners and some other components, but are much less exposed than the aforementioned main content types.
Joomla 4 (as James commented) does bring to the table the following: Custom fields and REST API. So even though I haven't tried REST API, I can tell you that custom fields are a little bit underwhelming (can be only connected to the 5 default content types, including the Contacts type) and templating is a little rough around edges. Field value is stored in table _fields_values with key-pair field_id item_id. Field types and useful classes can be found in this diagram.
There is also the option of fully fledged CCK such as SEBLOD, which is unfortunately still in beta (on GitHub) for Joomla 4. Having a CCK you can create any field you like, and have it stored in database as seblod(standard)/JSON storage format and article/user/custom content object (details about storage). SEBLOD also gives the option to create custom content types, outside of the default A/C/U/UG types. Since Joomla exposes content managed by SEBLOD (component) through plugins, what remains to see is how well will it serve the custom content via REST API.
As a bonus side, SEBLOD is quite capable for site CRUD operations. They even claim: "SEBLOD is an Application Builder and a Content Construction Kit.
It helps to create/manage custom online applications & full-featured websites."
I can only say that still 7/8 years later I return to it with pleasure knowing it will do even more than what's on the tin, and there is still a vibrant community forum if need arise to look for a solution.
All praise aside, I was not able to configure (beta) SEBLOD under Joomla 4.
As you can notice I haven't mentioned Flutter since in that regard I consider myself a beginner, dipping my toes for the moment only in consuming other framework APIs (AliceApp) and Rive animations.
As far as the original question go, James already gave most valuable insights. Since form is already working with user data, custom fields can be attached to user data type.