Direct drive has the battery running the LED with no limits on it. This can cause some problems though: What if the batteries aren't giving power at the right voltage? A slight voltage change represents a large change in current for the LED. As the batteries weaken, so does the light. And if you get different batteries the LED might burn out. To keep the brightness constant through the battery life, AND to keep from roasting LEDs, people use electronics to mess with the input power.
If I stand by a lightswitch and flip it quickly off-on-off-on-off-on, you won't get as much light as if it were on constantly. If I dwell on the "off" for longer, there's less light, and if I leave the switch 'on' longer you get more light. And if I can switch it quickly enough you won't notice the blinking. That's "Pulse-width modulation," where electronics quickly connect and disconnect the LED to limit the current going through. PWM is ideally either 100% power or 0% power, and will be 'On' for a given percentage of the time.
This sort of light is still battery-dependent, but it gives you control over LED brightness. If you put higher-voltage batteries in one then all the settings will be brighter. It's also possible to damage your LED this way, BUT a temperature sensor can step in and cut down on the power going into the LED if it registers a too-high temperature.
Other light controls:
You can add a resistor to this to limit the current going through the LED. The voltage of the battery will equal the voltage of the LED plus the voltage of the resistor, at that particular current. Some lights switch from direct-drive to resistor-limited power to get two modes. You could do a lot of different modes with resistors, but it can be inefficient. If you're burning tons of power in the resistor you'll have a nice heater and a short-lived light battery.
Constant-current control uses more complex electronics. I have to think of it as a magic black box that does what it needs to put a specific amount of current into an LED. There are three types of constant-current drivers: Boost, buck, and buck/boost. A boost driver boosts voltage. A buck driver lowers it. And a buck/boost driver is more versatile. Some lights use these circuits with PWM to make different output levels, others just change the output constant current.
Boost: A boost driver will take low-voltage input and make higher-voltage output. That's how the Quark MiNi can run a 3.2v LED with a 1.5v battery. To get the higher-voltage power you want, you have to draw more current from the battery. Doubling the voltage would require about twice the current from the battery.
Buck: A buck driver will take higher-voltage input and make lower-voltage output. 2-li-ion LED lights use this - their batteries start at 8.4v, plenty to cook an LED. With (some components and stuff), a buck driver outputs lower-voltage constant-current power to the LED. This draws less current from the batteries to get the power the LED needs.
Summary: Direct drive is very simple, but requires good planning for the batteries. Picking the wrong batteries will either give you less light or destroy the LEDs you connect. These are generally one-speed lights.
Indirect drive: Resistor, Pulse Width Modulation (PWM), constant-current (With buck, boost, and buck/boost).
Indirect drive is more complex but gives more options. You can have different brightness settings to extend battery life, you can use different battery voltages than exactly-the-right one, and you can guarantee a particular level of output. ONLY a boost driver will give you high LED output from 2AA batteries.