Non confondere la ridefinzione (creazione di alias tramitte il typdef) con la creazione di un nuovo tipo di dato.
typedef struct macchine
{
int numero_colore;
} automobile1;
qui stai faccendo due cose in una. Crei una struct di nome macchine e crei nello stesso momento un alias di questo struct tramite il typedef struct macchine automobile1.
typedef struct
{
int numero_colore;
} automobile1;
qui invece stai solo creando una struct automobile1 perche stai ridefinedo una struct anonima in automobile1 (typedef struct automibile1)
Guarda anche quà la definizione di typedef che non viene utilizzata solo per le struct.
http://it.wikipedia.org/wiki/Typede