Changing LED intensity by changing voltage
LED intensty is more controlled by the current than the voltage (more electrons = more photons).  If you want to vary intensity with voltage, the simplest method is to add a series resistor that basically converts changes in the supply voltage to changes in current in a more linear fasion than the diode itself.  It is also possible to build a constant current driver using some transistors and op-amps.  However, these methods are inefficient as converting voltages, especially with linear devices like resistors and transistors in saturation, generally wastes power.  

A better solution is pulse width modulation, which is just like your 2nd idea.  With pulse width modulation, less power is wasted because the drive transistors are either on or off, and when on they have a very low resistance.  There will still be a resistor to limit the current when turned on, and there may also be a DC to DC converter to generate the correct drive voltage from the input voltage.  However, the frequency is generally quite high (1 kHz or higher) to limit visible flickering.  On the flip side, too high a frequency will also waste power because the control transistors have a relatively high resistance when they turn on and off.