Didn't look into it much, but there's a note in the luv docs: Apparently, the Lua state will be cleaned up before the worker thread exits? Crashes aren't great and it's quite easy to see this when using the test runner. Let's see if there's a way to prevent it.
Reproduced by simply calling uv.new_thread() inside a section or subsection, then starting the test runner on the file.
PANIC: unprotected error in call to Lua API
Assertion failed: !(handle->flags & UV_HANDLE_CLOSING), file libuv/src/win/async.c, line 76