The current provided by the board pins is much too low to control motors. The current that will flow when you hook up a motor directly to the pins is large enough to destroy the Arduino microcontrollers. Motor drivers convert the low-voltage low-current output of the microcontroller to higher-voltage higher-current needs of the motor.
Now, if you are truly talking about motor *controllers* (not motor drivers), then they simply off-load some of the work from the microcontroller. You can pretty much do anything a "DC motor controller" can do on your own, but it can be very demanding on the hardware (interrupts, etc.) leaving little time to do other things. It can also get pretty hairy when you try to control multiple motors at once. An external motor controller can make things easier.
--
The
QuadRAM shield: add 512 kilobytes of external RAM to your Arduino Mega/Mega2560