Another advantage of UART is that there is no master. Nothing has to be addressed, nothing has to be given a clock so it can report in. It's asynchronous, the device on either end can push out data whenever it wants. This makes it very flexible.
With I2C or SPI, the slave has to sit there and wait to be called upon before it can say anything. With SPI you have to load in garbage data to the transmit buffer in order to run the clock to pull in data from the slave, and if you want to say anything to a device, even if the device doesn't respond to that command, you have to deal with garbage bytes pulled into the receive buffer during the transmit (and the associated Rx interrupts, etc.). With UART, if you want to say something, you say it, and if the Rx interrupt fires it's because you were sent something, it's not just a garbage-filled byproduct of running the clock to transmit.
If I had to choose one word for each of them, it would be:
SPI - fast
UART - simple
I2C - expandable