From The Jargon File (version 4.4.7, 29 Dec 2003) [jargon]:
shell
n.
[orig. {Multics} techspeak, widely propagated via Unix]
1. [techspeak] The command interpreter used to pass commands to an
operating system; so called because it is the part of the operating system
that interfaces with the outside world.
2. More generally, any interface program that mediates access to a special
resource or {server} for convenience, efficiency, or security reasons; for
this meaning, the usage is usually a shell around whatever. This sort of
program is also called a wrapper.
3. A skeleton program, created by hand or by another program (like, say, a
parser generator), which provides the necessary {incantation}s to set up
some task and the control flow to drive it (the term {driver} is sometimes
used synonymously). The user is meant to fill in whatever code is needed to
get real work done. This usage is common in the AI and Microsoft Windows
worlds, and confuses Unix hackers.
Historical note: Apparently, the original Multics shell (sense 1) was so
called because it was a shell (sense 3); it ran user programs not by
starting up separate processes, but by dynamically linking the programs
into its own code, calling them as subroutines, and then dynamically
de-linking them on return. The VMS command interpreter still does something
very like this.