A shell is a program used to launch other programs.
The first goal of a shell is to bypass some OS limitations (on ti83/ti83plus/ti84plus, run a program from home without shell is limited to ~8k max) and on ti83 regular you often need to unsquish the code. That's the first use case of a shell.
In addition, a shell could provide some cool other things like sharing libs (ION do that) or do some special action after a ram clear, or modify the font etc... This is a bonus ;)
A program which is programmed for a specific shell will have some dependancies so you simply can't run it without the shell (or even usually with another shell)
Well known shells for ti83/ti83plus/ti84plus are ION, MirageOS, DoorCS.
For ti82, you could use crash.