While there is no hard and fast definition, an esoteric programming language, or "esolang", is a programming language intended to entertain, confuse, and otherwise blow your puny little mind. If that sometimes means butchering the definition of "programming language"... then so be it.
Esolangs are toy languages, if by "toy" you mean something like "Mainway product".
Esolangs are joke languages, if by "joke" you mean something like "Beethoven scherzo."
Esolangs are research languages, if by "research" you mean something like "Fear and Loathing in Las Vegas."
A comprehensive repository of information on esolangs can be found at the Esolang Wiki.