Для меня это плохой дизайн, который, к сожалению, случается в Win32 API с включённым socket / socket2, если я правильно помню. В результате ошибка в порядке включения вызовет ряд ошибок, которые просто происходят из ниоткуда, и их может быть сложно отладить в тех случаях, когда зависимость меняет определения, но код по-прежнему компилируется.
В любом другом случае у вас все еще будут проблемы. Если вы не включаете заголовок x.h, потому что y.h уже включает его, то ваш код зависит от зависимости y.h от x.h. Если позднее y.h подвергнется рефакторингу, и для него больше не требуется y.h, удаление включения нарушит вашу базу кода. Это признак связывания (даже если не на уровне класса): изменения в одной части кодовой базы должны распространяться и распространяться на другие части кода.