You could possibly create an external db table with email and an id number (or whatever you want to use), then in your form you won't let them see the Form sections unless the lookup finds aka authenticates a person. It means you would have to manage another table but its doable.
The other option is to have a workflow kick of a forms process with some information filled out and passed to the form (either on schedule or however your process works).
Otherwise, you could pass some things through the URL (never set it up so I don't know much about it but look on this site for other's solutions) and make it super ambiguous so only people with the URL can fill it out.