Причём с обратной косой чертой и двоеточием ещё понятно - исторически это разделители буквы диска и каталогов в пути, прямая косая черта - чтобы избежать проблем при взаимодействии с юниксом, разрешить применять это в имени - проблем не оберешься. А остальное-то почему? Потому что *?<>| используются в командной строке? Так какой-нибудь % тоже используется, и ничего - давно придуманы кавычки и искейп-символы, позволяющие избежать чего не нужно и делать что должно.
Кстати, символ "унылое говно" в имени тоже нельзя. Но не потому что винда, а потому что символа "унылое говно", в отличие от "просто говно, обычно рисуется как весёлое", нет в юникоде. Я считаю, зря: на фоне того, что натащили в юникод за эти годы, "унылое говно" смотрелось бы весьма органично.