Emacs is much like that, as everything the user can do is an interactive command, which is typically a named function. So tools like Helm, Ivy/Counsel, as well as the built-in completion for M-x, let the user find and execute commands by name. And, e.g. `helm-M-x` display any bound keys next to the command name.