Chris,
Your idea is what I suggest you do.
The power of mongodb comes from having denormalized data (vs. normalized data, where the goal is to minimize redundancy). When you query mongo for data, you want to query the database only once, and get back everything you need. There is no way to do this in mongodb if you have the data you need spread out over several collections (at least no efficient way that I know of). I think you should consider having an "uploaded_by" field in your Recipes collection that contains the formatted first/last name of the uploader (as you have concluded). You will also need a field for each user (say, uploaded_recipes) that contains an identifier (or collection of identifiers) to the recipes each user has uploaded. That way, you do not need to perform joins on your data. This would be the "mongodb way" of setting up your database.
To answer your persistence problem, the process for handling changes to a user's name would need to be dealt with differently. The procedure that implements changes to a user document must also update the "uploaded_by" field for each recipe a user has uploaded (you traverse over the uploaded_recipes field for that user). The idea here is that you add complexity to the insertion process to simplify and improve queries to your database.