Have you tried out a combination of (set:) and (prompt:) yet? It's a bit intrusive as (prompt:) makes a text box pop up instead of it being smoothly set inside of the text. And cause the prompt pops up as soon as it's loaded, I combined it with a (link:) that only reveals/loads the rest of the passage upon clicking it. You can leave the part where I wrote "Charlie" empty, that'd just be the default text displayed.
I don't have that much experience with Harlowe though, I've so far mostly worked with SugarCube. Might be that there are better ways for this:
You've always held the deeply insignificant belief that the text is wrong: your (link: "first name...") [==
(set: $firstname to (prompt: "Your first name...", "Charlie"))
...seems to be a little larger than your (link: "last name...") [==
(set: $lastname to (prompt: "Your last name...", "Birmington"))
...but when you'd asked if maybe a mistake had been made, the man at the desk had said it didn't matter...