Looking at your photo of the LEDs, I see a large yellow area. My guess is you may have purchased RGBW type, rather than normal RGB. If you're getting results that are too bright, and tend to have washed-out colors, maybe it's due to using the wrong types of LEDs with that bright white LED inside?
Regarding the "PWM" idea, Micah did what she called "temporal dithering" in her Fadecandy code, which is based on OctoWS2811. That's probably where you want to go with this. But it has serious limitations, mainly that the LED strips must be kept quite short. Each LED takes 30 us to communicate. So if the strip is long, you can't achieve hundreds of updates per second, which are needed if you're going to try to effectively blink the LEDs on and off rapidly to get more low-end range.
There's also an open-ended question of how well the LED controllers inside each chip handle the individual changes (some I've tested... not well) which doesn't matter much if the LED's PWM is 425 Hz and you give it new data at 30 Hz. Each color gets display for ~14 of the LED controller's PWM cycles, so if one of those 14 cycles is done badly, not a huge problem. But if you send data much faster, many of these LED strips respond badly. FastLED's code even has check for the update rate. I've considered adding similar code in OctoWS2811, but so far I've always kept it simple, since most people use it for very large projects where that's rarely an issue.