Lisp and Scheme are marvelous 60s-70s hippie acid-head languages. "Hey, let's use a small set of primitives and treat code and data the same and we can run huge worlds with a tiny, recursive interpreter!"
By the time you get to Emacs though, many huge worlds have been built, and navigating the huge world(s) that small set of primitives has created can be..uh..daunting -- both because of 1000s of people's contributions and because of the weight of history (e.g. booleans are "predicates" -- from calculus -- thus all the "_p" names).
That said, at it's core, it's elegant and lovely.