With an array seems best so you can pull the choices from columns and the NPC would have an identifier for the row. I guess for simplicity you make it so that each choice clicked moves to same column for all NPCs. Then in each cell you can have the text string with separators as described above. There's a lot going on though if you have to select choices and then proceed through changing text. You would need to create the initial box with dialogue and choice maybe pulled from the first 4 columns of the array, then the text objects when clicked navigate to either 5,6 or 7.
My approach to close the conversation or return to the base choices, you could in the string add something to the end so like "String1_String2_end" or "String1_String2_back" then as you proceed through the tokenat() you add another sub-condition if text=end then close the conversation, if text=back then return to that original text.