The truth is always in the datasheets, the schematics and the code:
The Arduino UNO actually uses the
/DTR line to trigger a reset, as you can see on the following datasheet:
So basically, when the firmware of the Atmega8u2 (on the left) is pulling the pin 13 low, a reset is triggered for the Atmega328 on the right.
Another design was achieving the same thing using the
RTS lines of the FTDI component (left) to trigger a reset on the Atmega328 (left).
To avoid this behavior, a 10μF capacitor between Reset and Ground is enough, but you can also cut the RESET-EN trace to prevent the auto reset permanently.
On the software side, as @sachleen says in his answer, you can control the reset behavior using whether you trigger or not the DTR line.
That thing does not happen with the Arduino leonardo and Micro, with the bootloader Caterina does act on the
DTR line, but on whether you open a connection at 1200bps. That's because both arduinos have an AVR microcontroller that can directly "talk" on USB. There's actually a topic about how to trigger a reset.