I've struggled with this a few times, and at no point do I ever feel like I've handled this the "right" way. However, here are the options I've tried.
1. Structure the document so that anywhere something is filled in, an entire line can be dedicated to a user's entry.
2. Provide a page that is nothing but fillable fields. On that page, ask for whatever answers you need. Then, on the subsequent pages, make your text value reflect the concatenation of the text before what the user enters, the text the user enters, and the text after. You could feasibly have a LOT of text here. In fact, you could have a few blanks to fill out and then generate the ENTIRE document from what's entered there.
Ex: (There are probably better ways to do this.)
On p1, there are four fields and a button. tfName, tfAddress, tfCity, tfState, and btnGenerate. On p2, there is only a text field that is expandable: tfResult.
The javascript for btnGenerate::click looks like this:
xfa.resolveNode("p2.tfResult.value.#text").value = "My name is "+tfName.rawValue +". I reside at "+tfAddress.rawValue+" in "+tfCity.rawValue+", "+tfState.rawValue+".";