To further simplify. A core is where a thread is executed. One core on your CPU means you can execute ONE thread at a time. Even though from the user's perspective, it looks like manythings happen at the same time, the OS is able to sort these threads in such a way that it all appears to happen at the same time.
If your CPU has two, 3, 4, 5, etc. cores, then it can execute one 2, 3, ,4 ,5 threads at the same time.
Some CPU cores are special, in the fact that they can achieve thread paralellism (the act of executing many threads at the same time) with a single core (like hyperthreading P4s).
Most programs spawn multiple threads, but there is a difference between an app that has been specialized for multiple CPUs (or cores) and one that is simply threaded to make best use of a single CPU/Core. An app designed to work on multiple cores (or CPUs), will have optimizations geared towards executing things in parallel. This means there is much communication across all the threads of a program in order to keep things synced, etc. A program that is aimed at a single CPU but spawns multiple threads, often does so to better organize the program and make it simpler for the OS to arrange into the process stack.
Take games for example, most games probably spawn a thread for user input, graphics, sound, and AI. The OS then keeps track of each of these threads as the process. On a single core single cpu system, the OS will sort these different threads into some order where it can efficiently compute all the high priority threads first, and so on. If the program and the OS have been designed to deal with multiple cores/CPUs then your threads will get processed at the same time. AI and Graphics for example, could be processed side by side, thus more quickly driving a game.