How can I seal cross-stitched keychains?
If you are willing to experiment on my behalf my suggestion would be to use 2 part epoxy resin. It is self leveling, and dries hard, clear, and smooth (if done well). 

Most people use resin for larger projects so instead of buying large containers of the stuff for small projects like this you might be able to get away with the smaller ones that you would find in dollar stores and hobby shops. The are advertised as a repairing glue. Small container with 2 tubes that keep the resin and hardener separate. A single plunger extrudes both at the same time. You would have to glue down the stitch to the frame separately in case it tried to escape as it dried (Most recommend 24-48 hours)

If you do try this make sure you mix the compound before you apply it to the final product i.e don't dispense right into the frame using the plunger.



The only potential issues I see here is from the height of the recess in the keychain:


  There's a little bit of a lip around the edge of the keychain, but the cross stitch ends up sitting higher than this lip.


This might not be an issue. If done well and if the height difference is not too large, the resin can raise over a little without going over the edge. (This is called surface tension. It is what liquids do when you fill a cup too high). 

You could consider replacing the construction paper with something else like paint or marker. The paper likely does a better job of covering the back of the cross stitch, though. You might fare better with a lightweight card stock. 



Not sure if this applies to the think Mod Podge as it is setting but you could try to remove bubbles with a little non-direct heat like that from a hair dryer or heat gun used at a distance. Another simple trick that would be easier is to exhale (Not blow) over. These work for removing bubble for curing resin. Would not be surprised if they apply here as well.