It would be nice if the 3.5mm jack could output levels between high and low
Hmm, it should. I'm not sure technically how this is done (software wise or HW wise), but it's definitely possible.
One way to do this is with Pulse-Width Modulation, which is somewhat similar to how grayscale is done on monochrome screens. Basically, you have some period of time (in the case of sound, it should be well under 1/20000 seconds to be outside the audible range) which is divided into, in the case of 8-bit sound, 256 cycles. For an output level X, the hardware would output low for X cycles and high for 256-X cycles. As you might imagine, it's a super pain to have to do this manually through the CPU. Dedicated hardware for this wouldn't be too hard to implement, I think.
Edit: Actually, since 8-bit values only go from 0 to 255, you'd have 255 cycles, go low for X cycles and go high for 255-X cycles.