Let me add to the OMeta love. I did my PhD using OMeta/JS, and I'm using it now in my startup. I find it's a perfect companion to CoffeeScript, both of them compiling to JavaScript as they do.
Since you mention CoffeeScript, since I've found out about OMeta last week, I've started a little work on a CoffeeScript compiler in OMeta. Have some basic stuff working, but error messages for parsing kinda suck: the best I can do with OMeta/JS as currently implemented seems to be noting the position at which there's a parsing error.