First of all, this is all pretty good. If it was short, it would be fine. Because it's long, it could use neater organization.
My biggest feedback is if you separate
- Interacting with the reddit API
- Local persistence to and from files (you may want to have separate persistence for ongoing and archived games)
- Messages to and from players (make them an explicit concept not linked to the reddit API)
- The core hangman game
then the code will be easy to understand. It will also be easy to reuse, so you can make it cooler (switch out games, add a discord bot to play the same games, change persistence).
Other than that, this looks fine. Mostly, it's lacking robustness and dealing with errors, which ends up being pretty important for web software and human input. You could add robustness, and learn about that, which will help if you want to be a professional programmer. Or you could decide it's no fun and ignore it. But do keep in mind if you planning to run this in a loop forever, that there are currently likely ways you'll end up spamming people thousands of messages, which will suck for them and you.
- Learn about all the things that can go wrong if you control-C your program halfway though, or if you encounter an exception halfway through. Will your database be corrupt and everyone will lose their game? Will you send people two messages? Will you be unable to get new messages and send them a new message every time your script runs?
- What happens if reddit returns an error? Do you send people multiple messages? One common goal is to make "partial progress"--if you can read messages from 98 people, you should process those 98 turns and mark them as read, not fail for everyone. The errors might be from reddit, or they might be from you.
You've chosen to store JSON. This is fine, especially if you want to manually debug. There are also built-in serialization methods in Python (pickle, shelve, and marshall). You may encounter some problems if you get more players, runtime errors, or run for a long time.
- If you start having a large number of updates, you'll find that writing and reading the whole file every time becomes a problem. This is a whole area to learn about, I can't really give any concise advice. It's definitely a problem you will run into many times, so it's worth learning the options and common solutions.
I didn't see any defensive programming in particular, so you might want to think about that or security. I also don't see any specific problems, just mentioning that it's generally good to think about. Keep in mind that a user typing in really weird guesses (doesn't have to be malicious, think just some weird unicode smileys) could crash your game or corrupt the database.