I think a quick differentiation between multi-threading and SMP capable/optimized code needs to be made.
A multithreaded application can possibly make use of multiple cores, depending on the type of work the program is doing, and whether or not the OS's scheduler can recognize a need and then follow through with the allocation.
On the other hand, applications can actually be designed by the developer to use multiple processing cores. While difficult and complex, performance can be significantly higher then simply relying on an OS's scheduler, which is tuned for general use and performance situations.
Some examples, Winamp, Firefox, Internet Explorer, mIRC, Windows Live Messenger, AIM and so on are all multithreaded applications. Pretty well all current games are heavily threaded applications but gain pretty well no performance benefit when adding more cores to a system. (Quake 3 'has' SMP support but it was broken with a patch along time ago. I'm not sure if the Doom3 engine is SMP capable. Half-Life 2 will get SMP capability added when HL2 Episode 2 comes out in '07.)
Photoshop, Apache, Windows Media Encoder, 3D Studio Max for example are also multithreaded applications but also have SMP routines coded in. These applications do gain performance when multiple cores are provided to them.