eshell is a shell (not a terminal emulator, nor a process hosted in one) written in pure Emacs Lisp . It is very powerful, flexible and customizable, but poorly documented at time of writing.

Emacs itself is fully functional either in a terminal or a windowing system. Some keystrokes available under window systems may not work in a terminal and vice versa.

User can use shell inside Emacs, with shell mode, eshell or term.

shell mode

in this mode, Emacs run an inferior shell, with I/O through buffer (default to *shell*). The shell buffer is a normal buffer, so you can edit and move around as usual, plus you have special keys to interact with the shell, like [M-p] to call the previous history command or [C-c r] to go to the beginning of the last output (see all keys in the menu).

See also: shell-here to open up a shell in the current directory; shell-pop to pop up and pop out a shell buffer window easily (both installable via ELPA).

eshell

in this mode, Emacs emulate a shell. It is writen by Emacs Lisp.

term

in this mode, Emacs emulate a terminal, then Emacs invoke a shell that you choose, then link to the terminal.