el valor de retorno no sirve para nada mas que para saber como ha acabado tu programa. como has dicho, si acaba bien suele devolver un 0, por eso lo de "return 0;" al final. pero tambien puedes usarlo para saber que error ha habido en tu programa. por ejemplo:
int main(int argc, char** argv) {
FILE *f;
if (argc != 3) return 1;
if (!f
=fopen("archivo.txt", "r")) return 2;
//....
en este caso, si el numero de argumentos pasados al programa no es correcto y el programa se cierra por este error, el programa devolvera el valor 1. luego si hay un error abriendo "archivo.txt", el programa devolvera 2 y se cerrara. y asi con los errores que tu quieras. asi que no es mas que ponerle etiquetas a los distintos errores que puedan suceder para asi poder arreglarlo de manera rapida.
para ver valor de retorno de tu programa, en windows no se como sera, pero en linux y en mac no tienes mas que hacer uso de la variable $? en la terminal de esta manera:
echo $?
y te dira el valor de retorno del ultimo programa ejecutado.
un saludo!