I agree with what @fibric said. I'll add some more points :
Node.js works on Event Loop which is single threaded. But as you said libuv maintains an internal thread pool which handles all the blocking operations. If Node's thread pool is having m threads and concurrent requests become m+1, the extra request has to wait for one of the threads to become available. But as @fibric said Node.js has many queues and each additional blocking op can be added to the queues. A slow Node.js app rarely has something to do with thread pooling.
So, I will say yes Node is non-blocking and evented in nature. But that doesn't mean it doesn't make use of threading at all. It does, but you as a developer have nothing to do with it. We just work with the Event Loop which is single threaded and non-blocking. It's Node's responsibility to delegate the blocking tasks to worker threads.