although 63-bit integers are possible by using the sign bit of the NaN to distinguish them, and the loss of one bit from a 64-bit integer is not likely to be a problem for the majority of applications.
That's an incomplete (or false) statement:
Yeah, thanks for the correction. I was thinking too fast while distracted.
Realistically, NaN packing is best for languages without a separate integer type anyway, such as Lua 5.2 and earlier. As soon as you introduce an integer type, you have to either cap it at 50-something bits (which is a strange limitation to have in your language) or treat it as an object via a pointer (not great for performance), and either way is awkward.