Ah, the wizard wasn't trapped in his memories. He was trapped in the codebase :)
I'd start with one reusable interaction rather than a whole new engine: an object has a name, one line of text, and a flag it sets. Then the same object can show a different line once that flag is set. Adding the next memory becomes writing a few lines instead of wiring another special case.
What were you building it in?