I think this has been addressed in user linusg's rpi-backlight Python library on Github here. They've embedded a short video clip on that page which shows the effect they've achieved - looks like smooth fading to me.
They included a short example on running the code. I think the relevant line is bl.ets_brightness(20, smooth=True, duration=3):
>>> import rpi_backlight as bl
>>> bl.set_brightness(255)
>>> bl.set_brightness(20, smooth=True, duration=3)
>>> bl.get_max_brightness()
255
>>> bl.get_actual_brightness()
20
>>> bl.get_power()
True
>>> bl.set_power(False)