setTimeout is most probably calling the sleep or Sleep system call.

The actual mechanics, including the minimum amount of milliseconds, of setTimeout are proprietary and/or system-dependent, since they are not in the official ECMA specs. It depends on your Javascript run-time, as well as the system you are running it on. Given, your Javascript run-time does not add a whole lot of overhead, the minimum amount of milliseconds is determined by the timeslice resolution of your operating system and hardware. The smallest "sleepable" amount of time is usually the time it takes for the process to be allocated another timeslice by your system's scheduling algorithm.

On Windows (post XP) for example, the documentation for the sleep system call reveals:

A value of zero causes the thread to relinquish the remainder of its time slice to any other thread that is ready to run. If there are no other threads ready to run, the function returns immediately, and the thread continues execution.

That means, under some extremely rare conditions, where there is no other process currently waiting on the hardware thread that your Javascript run-time process is running on, it might continue immediately after the caller finished executing, depending on how your Javascript run-time is implemented. You will probably not observe such condition very often though :)