Usually the biggest missing piece is exposing objects to the DOM, this
isn't possible while not reusing the JS garbage collector, which hence
requires using native JS objects to represent lua objects.
The newest project (which I've been helping with) https://github.com/giann/fengari is a ;(manual) translation of the Lua
5.3 VM to javascript, while using native objects. This allows for
proper lua coroutine control flow, while also allowing full interop
with javascript (and hence the DOM). This means you can write a
library in lua and use it from JS, or in JS and use it from lua.