This is definitely doable. I'm not 100% certain, but I suspect that the sharepoint list idea is your best bet.
Make sure you have a column to store the user(could be their profile, an email, any unique field really) so you can reference this to find the record.
Then, on the app load, set a variable using a lookup(YourList, UserField = UserComparableValue).
Additionally, when they submit a record, check if they've submitted previously, if they have, update the existing record for them, if they haven't create a new one for them.
As an example, lets assume you store them by email in SP, as a Text Column. Also assuming you're submitting these with a Form Control.
To get existing records for them(in App.OnStart):
Set(PreviousRecord, LookUp(*YourList*, Email = User().Email))
Set the Defaults of your inputs as:
PreviousRecord.*AssociatedField*
And when they submit(If using a form, in the form's OnSubmit):
If(
IsBlank(LookUp(*YourList*, Email = User().Email)),
Patch(
*YourList*,
Defaults(*YourList*),
{
Email: User().Email,
Field1: *YourForm*.LastSubmit.AppropriateValue1,
Field2: *YourForm*.LastSubmit.AppropriateValue2,
Ect.
}
),
Patch(
*YourList*,
LookUp(*YourList*, Email = User().Email),
{
Email: User().Email,
Field1: *YourForm*.LastSubmit.AppropriateValue1,
Field2: *YourForm*.LastSubmit.AppropriateValue2,
Ect.
}
)
)
Hope this helps!