There are two main reasons PWM is commonly used instead of some error accumulation method: Known and fixed lowest frequency content, and that it's built into just about any microcontroller.
With basic PWM outputting a fixed value, you know there are no frequencies in the output below the PWM frequency. This is important for filtering it out. In the lamp example, you can easily guarantee that none of the switching will be visible.
With error accumulation, the lowest frequency could be much lower. In error correction with infinite precision, the lowest frequency content can be infinitely low. This, of course, makes it impossible to guarantee that it doesn't get down to the valid signal frequency range. In the lights example, you can't guarantee that there wouldn't be some component in the visibly detectable range, meaning the lights could be seen to flicker by human observers.
The usual reason for doing error accumulation is to get better precision. With PWM, the number of possible output values is the number of slices per PWM period + 1. For example, with 10 µs PWM period (100 kHz frequency) and a slice time of 500 ns, you only get 21 possible output values (duty cycles of 0-20).
In practice, error accumulation usually uses finite precision such that the lowest output frequency is bounded. For example, N-period dithering is a common way to do pre-computed error accumulation. With N slices per PWM period and M-period dithering, you get MxN+1 total possible output values. Note that this is the same value as using a MxN slices per period in the first place, meaning the period is M times longer.
Since dithering produces the same worst case, and that's what you have to design the filters and the rest of the system to anyway, it is rarely used instead of just making the PWM period longer. The few times I've used dithered PWM have been to work around hardware limitations where there weren't enough independent clock sources and the PWM had to run at a higher frequency because something else needed that frequency. Dithering is also more complex because you have to be able to adjust the duty cycle every period, even for fixed output values.
Even with infinite precision error accumulation, the amplitude of the frequencies gets lower as the frequencies get lower. Below some frequency, the amplitude is below the noise floor, what you otherwise care about, or the period is so long you're going to be adjusting the output value anyway. I used a system like this to control a large number of resistive heaters from a single micro once. The slice time was 250 ms, a very "long" time for the micro. Each slice, the micro updated all the error accumulators with the result deciding for each heater whether it would be on or off during the next 250 ms slice. The first order time constant of the heaters was 10s of seconds, and they were inside a feedback loop that also ran every slice, so the small low frequency amplitude was buried in the noise by the time it got low enough to matter.