There are several ways to do it.
One way is to get leds that are individually addressable. Then you use software to turn control each led, setting the red, green, and blue colors to the power level. One common system is the WS2812, that has 3 wires (power, ground, data). Each light is hooked up as a chain, and then you send a series of pulses out to control each light. One such example of this is the Adafruit neopixels system: Search Results for 'neopixel' on Adafruit Industries. You can set each neopixel pixel to 0..255 for each of red, green, and blue colors.
Adafruit sells neopixels in various setups: individual leds either for hooking up to a breadboard or sewing onto fabric, a ring of 16 leds, a stick of 8 leds, 8x5 panels, 8x8 panels, and strips of leds by the meter that you can cut to any length. You can chain neopixels together, by connecting all neopixels power/ground, and chaining the output data connection of the previous neopixel to the input data connection of the next neopixel. Note, as you get up to the hundreds of leds, you will need to worry about powering all of these leds and you will need enough SRAM on your Arduino to hold the entire state of the leds.
Another way is to use an i2c/spi pwm controller that can control multiple pins, using pulse width modulation to simulate varying the voltage. Again, Adafruit sells them (as do many other places). Here is a 16 pin i2c board: Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface [PCA9685] : ID 815 : $14.95 : Adafruit Industries, Unique & fun DIY electronics and kits and a 24 pin spi board: Adafruit 24-Channel 12-bit PWM LED Driver - SPI Interface [TLC5947] : ID 1429 : $14.95 : Adafruit Industries, Unique & fun DIY electronics and kits, Both i2c and spi, are ways to hook up remote chips to your Arduino. You can hook up something like 112 devices to an i2c bus, and the particular Adafruit device I mentioned has 6 address select pins, so you can address up to 992 different lights. I don't recall what the limits are for spi.
A third way is to use an actual digital to analog (DAC) circuit to vary the power. You can get i2c versions of these as well. For example the pcf8591 provides up to 4 analog inputs and 1 analog output. There might be DAC's that address a lot of pins, but I'm not aware of any. For just lights, PWM should be good enough, and you probably don't need a DAC.
Obviously when you get to more than a few lights, you need to worry about powering them independently from the Arduino.