Arjan,
Thanks for caring about these details!
It is not fixed.
LoRaWAN does use the explicit header indeed.
The LoRaWAN stack handles this, for example an excerpt from the LMiC:
if ((sf == SF11 || sf == SF12) && getBw(LMIC.rps) == BW125) {
mc1 |= SX1272_MC1_LOW_DATA_RATE_OPTIMIZE;
}