En si formas de comunicacion serial hay varias, como SPI, UART, I2C. Pero no son lo mismo.
ICSP = In Circuit Serial Programming ( Programacion Serial En Circuito)
Es para programarlo sin sacarlo del cricuito, por supuesto hay que tener algunas preocupaciones extras. Esto es para que no tengas que sacar el micro cada ves que queres programarlo, simplemente conectas el programador a tu placa y listo. Se hace de forma Serie la comunicacion al igual que la UART, pero su unico proposito es programar el micro.
La UART es mas universal. Hay otros micros o modulos como los de bluetooth/wifi/gsm en el que te comunicas con este "protocolo", podes ponerle un integrado para que te lo pase a otros niveles de voltaje y tenes un RS232 para conectarlo a la PC. A lo que me refiero que lo vas a utilizar para comunicarte con otras cosas.
¿Es posible usar la UART para programar el micro?
Si, si has escuchado de los bootloaders (pequeño codigo al comienzo del micro), podrias hacer uno que lo que reciba de la UART lo grabe en el PIC, de esa forma podes usar la UART como para "programar", aunque el que lo programa es el bootloader y lo unico que hace es recibir la informacion desde la UART.