Ciao,
come dici tu, la exit(0) serve per segnalare che è andato tutto bene, mentre un valore diverso da zero indica uno status diverso (potrebbe essere di errore, anche se non è obbligatorio).
Per quanto riguarda la tua domanda su quando e dove la mette il programmatore, è abbastanza semplice: la exit(0) viene messa al termine della parte di codice che rappresenta una esecuzione "normale" del programma, mentre le altre le potresti trovare, ad esempio, in parti di codice che gestiscono un qualche tipo di errore. Esempio:

codice:
if(errore_1)
    exit(1);
else if (errore_2)
    exit(2);
...
else // e' andato tutto bene
    exit(0);

Facci sapere se hai altri dubbi.

Ciao!