First off, the Hyperthreaded cores aren't "imaginary", they're simply logical. Let's take a Nehalem-based quadcore for example. With hyperthreading enabled, it has four physical cores, but eight logical cores. This typically occurs by adding adding another set of registers (control registers, status registers, address registers, etc.), while not adding in another execution set (as this would result in a truly additional physical core). The idea behind it is that since a system is not always dependent upon 100% execution set utilization, by adding in the additional control and general purpose registers, it can execute an additional thread and take advantage of the available execution resources (if anyone has any other thoughts or wants to make make any corrections please do so, my general memory on the fine details of a hyperthreaded architecture are a bit rusty

).
Anyway, people often think that to take advantage of Hyperthreading that you needed specially-coded software for it, and that's simply not the case. To see any type of benefit, you simply need to be using multithreaded applications, and in that regard, there are plenty of currently-available applications that are multithreaded.
Now, there has been considerable discussion on whether hyperthreading is even worth it for dual-core systems, given the extra power consumption, thermal output and the fact with a dual, quad (or soon to be 6-core) processor you already have multiple cores available for multithreaded apps, thus negating some of the usefulness of it.