penso che la differenza la veda solo il programmatore.
esempio:
codice:
struct data {
    int giorno;
    int mese;
    int anno;
};

typedef struct {
    int giorno;
    int mese;
    int anno;
} data;
Per il compilatore le due cose sono uguali.
Ma per te' no...
Infatti nel primo caso quando vuoi creare una variabile di tipo 'data' devi scrivere struct data varData;
mentre con il typedef devi scrivere data varData;

io penso che non ci siano differenze.