One method would be to create a table for each question and answer, you could id it with the questionaire number. When the user finishes with the question it is marked as done so there is no need to redo it.
The user can then exit and return to the questionaire at any time viewing only the unanswered questions.
To simplify life, I would search the question/answer records by questionaire id and then list them. The user could then touch the one to be answered.
You could also, if you have the later versions, use an exit field trigger to save the record if you already have a page layout with many fields on it and don't want to redesign. This field trigger would be the simplest method. Tab out of a field, save the record. Believe it or not, this method was used 30 years ago by xBase applications. This was before memory variables became popuplar with engineers and allowed more fun for us all.
If memory is valid, I recall applying an exit field trigger to a selection of fields using the same script trigger, so this simplifies your update if you choose this method.
By Apple's rules a phone call stops everything. In Go that means everything stops and there is no restarting from the middle of a script. You might try putting the phone in Airplane mode to prevent phone calls while the script is running. Haven't tried it but it ought to work.