succede questo per 2 motivi. Il primo è che con l'ultima istruzione non esporti il risultato vero e proprio ma vai a modificare una variabile LOCALE (start è una variabile locale e come tale non esporta i dati in uscita. per avere le modifiche in uscita devi usare l' * con il quale accedi alla cella di memoria voluta).
secondo è che la variabile nuovo di tipo NODE viene allocata nello stack della funzione Converti, con la conseguenza che all'uscita della funzione la perdi o in ogni caso anche se non vengono eliminati i dati puoi aver problemi di varia natura(sovrascrittura, segmentation fault ecc.)

un modo corretto per riuscire ad avere la struttura all'uscita è allocandola nello heap.

codice:
void Converti(int i, NODE *start)
{
  NODE* nuovo;
  /*chiediamo al sistema operativo della memoria di dimensione sizeof(NODE) 
  e castiamo il puntatore (malloc restituisce void*) come puntatore a NODE (NODE*). */
  nuovo =(NODE*) malloc(sizeof(NODE)); 
  nuovo->label=i;
  nuovo->dir=0;
  nuovo->jump_to=NOWHERE;
  *start=nuovo;
}
se non mi sono incasinato coi puntatori(nell'ultima istruzione) questa dovrebbe essere la procedura corretta.