I was like you, trying to figure out a way to get a list of all available key bindings, which wouldn't override any preexisting function, and tried to write a plugin to get the info. It's not finished, and will probably never be.
By trying to find all the syntaxes which would produce "free" key sequences, I found way too many exceptions, and edge-cases where I wasn't sure whether a key sequence could be considered as free or not.
That being said, in case you're interested, you could have a look at it, it's on github.
It installs the custom command :FK. I haven't used it for a long time, but IIRC, it accepts some optional arguments:
:FK -nomapcheck don't check whether the key sequences would override one of your
custom mapping, or cause lag (timeout)
:FK -noleader don't suggest key sequences using the leader key
:FK -nospecial don't suggest key sequences using special characters
:FK -mode normal suggest key sequences for normal mode
Inside a freekeys buffer, it installs a few buffer-local mappings, which you can find by typing g?.
It's only (somewhat) good for normal mode. The other modes haven't been really considered.
Again, it's not finished, and the code is a mess, so I suggest you remove the plugin once you've read and copied the information in which you're interested.