You don't :) At least, not for this use-case.
Instead you defer your configuration until such time as the library in question has been loaded:
(with-eval-after-load "esh-mode"
(define-key eshell-mode-map (kbd "C-M-i") 'eshell-previous-input))
Note that C-hv eshell-mode-map
provided me with the "esh-mode" library name.
If you did want to "make all variables and functions of a mode visible without activating the mode" then you would require
the library. e.g.:
(require 'eshell)
Also, what would the implications be if I decided to load the file manually as opposed to using a mode-hook?
If you load the file, then you incur the cost of doing so. If that's happening at init time, then you've slowed down your start-up time slightly. If it's possible that you won't even use eshell
in a given session, then this probably isn't what you want to do. (Or if you invariably run emacs as a server which starts when your system boots, then maybe you do want to pre-load things to make it that much more responsive later on, should you happen use that feature -- your call.)
If you use a mode hook then you are once again deferring the evaluation -- but rather than evaluating the code once, you are (re)evaluating it every time any buffer enters that mode. In this particular use-case we only need it to happen once, so with-eval-after-load
is more appropriate.