Zu 1) es stört doch eigentlich nicht oder? Ist halt nicht sauberer Programmierstil.
Es kann aber sehr schnell störend werden. Wenn dein Projekt wächst, und du die UART-Funktionen in zwei verschiedenen C-Dateien brauchst, funktioniert dein "Header" nicht mehr.

Zu 2) Hab ich geändert.
Bitte geänderten Sourcecode mitposten. Wer weiß, ob du nicht neue Fehler eingebaut hast.

Es hat sich leider nichts geändert.
Funktioniert die serielle Kommunikation ganz generell denn überhaupt? Mach doch vor die Endlosschleife mal ein "uart_puts("Hallo\n");" und in die Schleife (am Anfang) ein Echo, also z.B.
if (Daten) {
USART1_Transmit(Daten);
Daten = 0;
}

PS: Sollte der Compiler irgendwelche Warnungen ausspucken, unbedingt mitposten.