It's worth noting that these restrictions are only enforced at the library level. I'm perfectly capable of inserting keys with . and, I believe, $ in my database.
Nonetheless, I do escape my keys, using percent-encoding, but only for the three [$.%] characters, or, when a library calls for the $ character, I use the @ character instead (sometimes vice-versa too, since the $ character doesn't require quotes in ECMAScript, unlike @).
So there's multiple ways to deal with it.
But I agree it's rather silly it doesn't allow the full range of JSON.