I found one bug: you cannot create a zero argument lambda, e.g. (lambda () 42) will not work. You could also benefit from separate `let' construct, because simulating them with lambdas is a bit painful.
Apart from that, it works quite nicely (I was positively surprised you went for lexical scoping), but without macros, you can hardly say it's a Lisp, it's a language with Lispy syntax.
He was a regular poster on comp.lang.lisp, and one of the contributors there described him thusly:
"Ken Tilton is an aquired taste - if you can ignore his inflammatory remarks his advice is usually good. When I first saw some (most!) of his posts I initially thought WTF! but think of him as someone with Tourettes Syndrome and just look at what he is saying not how he is saying it!"
There's a couple of fortune cookie files of quotes from him (collected by someone else, but you can find them on his blog), they do make for funny reading, but you can see how some of this would sting if the remarks were directed at you:
http://smuglispweeny.blogspot.co.uk/2010/08/fortune-cookie-f...
Cool. I have been working through the lessons in Nathan's University (http://nathansuniversity.com/) which take you writing a Lisp interpreter (though admittedly with less rigor than this project) in Javascript.
Definitely recommended if you want a starting point for something similar and don't know where to begin.
Gotta shout out to my own Lisp-in-JavaScript interpreter from long, long ago: http://joeganley.com/code/jslisp.html ... far less complete than this, but perhaps interesting to someone for archeological reasons or something.
My goal here was to learn how Lisp works at a really low level. I'm planning to add the features you would expect from a Lisp (e.g. macros) very soon.