The shell is a user interface, just like a graphical desktop environment. For example, the most common shell by far on Linux is BASH, used in (I think) every form of GNU/Linux, as well as many other *nix OS's and Mac OS X.
The shell translates human-readable language into the binary commands usable by the machine, and outputs the binary outputs of programs into human-readable text (in the case of a command-line shell), or graphical output (in the case of a graphical shell)
The shell interfaces directly with the Kernel, which is where all the "real work" happens, such as invoking programs, communicating with hardware, etc.
Certain graphical programs are "front-ends," which give users a graphical interface to use existing command-line programs. These programs run commands through a Command-line shell (such as BASH), usually in a way that is not visible to the user. Other graphical programs might send commands to a graphical shell (such as the X Window System), or even directly to the kernel.