Not quite how it works, but I'm not particularly enchanted with it either.
The idea is that the processor deals with information in blocks of a certain size. When the software feeds it something to work out which doesn't fit into an integer number of these blocks (words?), you get space wasted as the last command is followed by empty space. Hyperthreading is hacking up another load of code to fit into the gaps left by the main thread.
So you get two threads running. One goes at the speed it would anyway, the other is an extra one. It'll be slower than a real core, as it relies on spaces in the previous code. For programs which use precisely two cores this sucks, as it runs on a real and a virtual core instead of on two real cores. The main consequence for us is that the processor runs a fair bit hotter as it doesn't get any time off.
^90% sure the above is a simplification, and it's definitely missing the proper words for blocks, data etc. I'd be grateful if someone can fill in the gaps, this is the best I could get from custom pc a few months back.