The reason is that the old hardware they use in these things only gets support from the manufacturer for older versions of Android. They provide something called a Board Support Package, or BSP, that is basically drivers for the hardware but is also tied to certain versions of the OS.
Cyanogenmod normally doesn't have a problem with this and just ports the drivers to newer versions, or finds newer drivers from other vendors that are compatible. Cheap shitty phones don't exactly have the best people working on them or much motivation to even try and not be shit, so your only real hope is that Cyanogen helps you out.
Software isn't free, even if it's open source. If you want quality you do, unfortunately, have to pay for it. Pay for it in money (a higher end Android phone like a Nexus 5) or in time (fixing it yourself, installing Cyanogen etc.)
Cheap phones carry more crapware precisely because they are cheap. They money they didn't make on the hardware is clawed back through the crapware.