No kidding. I was working on a very similar, event-loop-based system in Lua, but after spending more time with Erlang, I realized that it was already done a million times better. Lua's very good for other stuff, but massive concurrency is not its focus.
I wrote a (somewhat limited) Lua asynch. webserver to provide a REST interface to my distributed filesystem, but I'm not interested in generalizing it or making it uber-scalable anymore. It uses select (luasocket.select, actually), which is quite good enough for my purposes. It's not the primary part of the system, anyway - it was actually feature creep.
The thing that really bugs me with node.js is writing everything in callback-passing-style. Coroutines are SO much cleaner.