The problem can't be easily summarized, but the main problem is that vendors are always reluctant to invenst time, and thus money, into developing drivers where they are not sure that they will achieve the necessary return value.
In short: if they don't think there's too many 64bit users, they won't develop for them.
Same goes for applications. Most applications are just written for 32bit operation and rely on upwards compatability through padding to work. But depending on what kind of arcane magic is performed in the source code, this can end up pear-shaped, even though it is not too common - for the most part, only complex applications like games really suffer from compatability problems.
The OS itself is rarely at fault for doing bad stuff with the architecture - most implementations of 64bit are sound.
As to when 64bit OSes will be a majority, well, it's probably going to be a slow, creeping process. The easiest way would be for a chip manufacturer just to wholeheartedly dump 32bit processing compatability. This would force OS developers to maintain 32bit application compatability layers, and these would be implemented so that it's okay to run old software this way, but actively discourages any users trying to write new software to go 32bit.