Ist nur komisch, dass es ohne gesetzten Header auch mit UTF-8 mit BOM auch klappt, ohne aber nicht.
Nicht komisch, sondern ein Browser, der dem BOM mehr Glauben schenkt als den Angaben im HTTP-Kopf und im <meta>-Element. Es gibt ja auch einen gewissen Browser, der einen als normalen Text markierten HTML-Code als HTML-Seite und nicht wie gewünscht als normalen Text anzeigt.
Muss ich eigentlich alle Dateien (css, js und alle includes) auch als UTF-8-Dateien abspeichern.
Bei CSS- und Javascript-Dateien musst du selbst wissen, ob du es für nötig erachtest, solltest aber wissen, dass mit diesen Daten standardmäßig iso-8859-1 verknüpft ist und ein anderer Zeichensatz entsprechend per Content-Type gemeldet werden muss.
Dateien, die per include in eine andere eingebunden werden, sollten tunlichst mit dem Zeichensatz daherkommen, mit dem die einbindende Datei erstellt wurde.
Oder würde der gesetzte Header auch schon reichen?
Die Content-Type-Angabe sagt nur, was vom Server kommt. Dafür, dass deine Daten dieser Angabe entsprechen, musst du schon selbst sorgen.