You can create your own libuv event loops and run them on a separate pthread.
If you create a pthread in your own C++ extension then you're not really talking of Javascript.
Workers are not threads but they run in their own thread. Unfortunately you don't have shared memory. So you kind of have snapshot isolation by immutability. They can only communicate with postMessage. They're not threads, they do not share address space.
So Javascript is single threaded.
If you're getting race conditions with your multiversion concurrency control implementation, then you might need to look at how you isolate versions from one another. Write a unit test that adds numbers from 1 to 100 from 100s of concurrent transactions, you should end with 100 every time if you have no race conditions.
Without parallelism, you could introduce a bulk command API and wrap all your writes and reads in a single function.
The single threaded nature of Javascript will prevent race conditions if you do this - only one function can run at a time.