People are already doing all sorts of useful things with it! Only the 48 bits of the address space are actually being used by virtual memory (no current 64-bit OS is anticipating people to use more than 256TB of address space), so you can use the remaining 16 bits for... lots of things. (Note that there's also the lower 3 bits that aren't being used since memory addresses are aligned to a multiple of 8.)
The primary example is Lua (before 5.4, and also LuaJIT): they use NaN-boxing to make their object take only 8 bytes. Although a double (Lua's only number type) already takes up 8 bytes of memory, there are some bits residing on the high 16-bits that are free to use when the number is NaN. With that you can store the type tag in there, which enables you to use the remaining bits for things other than double (like for example, storing memory addresses...) The Crafting Interpreters book has a much better explanation of this: https://craftinginterpreters.com/optimization.html#nan-boxin...
You can look up at https://en.wikipedia.org/wiki/Tagged_pointer to see some more examples. Apple seems to use this a lot for their Objective-C runtime on iOS where the leftover bits are used for things like refcounts or various boolean flags for their objects. Personally I had experience exploiting this in my game engine: for storing the generational index for a memory arena (to catch any use-after-free errors).