Aruduino Uno uses ATmega328, while Arduino Leoanrdo uses ATmega32u4.
The microcontroller on the Arduino Leonardo can’t be detached, it’s mounted on the Ardunio board, while the microcontroller on the Arduino Uno can be easily removed. For that reason, some hardware developers code the microcontroller on the Uno board and attach it on another board.
Arduino Uno uses 14 I/O Pins, while Arduino Leonardo is capable of using 20 pins since it can use the Analog pins to be I/O too.
Pulse Width Modulation Pins
Pulse Width Modulation is a technique used to get Analog signal results using digital signals. Arduino Uno uses 6 PWM Pins while Arduino Leonardo uses 7 pins. (See Why do computer Hardware Fail?)
The Arduino Leonardo board is around 20% Cheaper than Arduino Uno.
Arduino Leonardo’s Microcontroller (The ATmega32u4 Microcontroller) has much more support on the USB than the Arduino Uno, so it enables the developer to create a more flexible USB projects. (See How to connect Bluetooth Headphones to your Android device?)
Flexibility to support protocols other than UART
The Arduino Leonardo is much more flexible in implementing protocols other than Serial UART, which could make it act as a USB device such as a keyboard or a Joystick.