If you do synchronous I/O, then your process (or thread) is blocked until the operation completes. That's why it's called synchronous. What is the CPU doing during that time? Servicing other processes. The same way most modern operating systems "schedule" work from multiple processes so none of them is completely deprived even if there are more jobs than processors, scheduling happens when I/O causes a process to no longer be runnable. If no runnable process is available, the processor can just idle for a while.
Asynchronous (aka non-blocking, evented) I/O is different. There, within a single process you have the ability to do more work while waiting for I/O events. It's like you're scheduling work within your own process, rather than depending on the OS to choose what work to do while you wait for I/O. Node.js can handle many concurrent connections because all I/O is done in non-blocking mode, so a single Node.js process can achieve a high level of utilization of a single processor core, and is never stuck waiting for anything (except truly CPU-bound computation, of course, but most Node.js programs don't have terribly much of that).