Put simple we first have to define where we are. We talk about threads in the OS realm.
Single threaded means that you cannot spawn extra threads (you can work around with workers though, even really move not copy certain data-structures into the worker 'thread' memory)
So you have 1 thread that does all your executions that's why it's blocking and as long as this thread has work todo your event-loop won't get triggered. The evenloop however has it's own thread-pool because this is usually done over the runtime which is embedded in the OS.
So the eventloop most likely does multithreading to do parallel processing.
The main confusion to me stems from the difference between JS (language) and Node (runtime).
And the concept of Single-threaded just tells you that you cannot spawn multithreading manually. But a Worker is it's own process so you can multi-process but you cannot 'share state'.
this is how far I will lean out of the window in the explanations ;D ... I am not really a JS dev but Marco Alka to my understanding could correct my statements and/or add clarifications.