How does a dual core microprocessors run so many programs?
It's great that you're curious. A simplified explanation follows with a few links to delve into:

All of the programs running in parallel is actually an illusion that is created by the OS.


Even if we have a uniprocessor system, the OS can still achieve the same thing.
For multiple programs running on the system, OS creates separate processes. 
Separate processes could then time-share the processor(s) available. 


Since a processor is very fast (gauged by frequency), it can switch back and forth among multiple processes that may be active in a particular time period (we're talking about the span of time in microseconds/milliseconds). Overall, this gives the user an illusion that the programs are running in parallel. This technique is called Multi-tasking.

Now, adding more processors(let's say one in your case) allows the OS to also use the processors in parallel. In this case, let's say the OS chooses to run half of the programs on one processor and the other half on another processor (in reality, it's a little more complex). Individual processors are still used by the running processes in a time-sharing fashion but since there are two processors, overall the performance of your running programs improve. Using multiple processors in parallel is called Multi-processing.

Although the definitions can be a little confusing, this overall implementation idea remains the same.