header img имеет абсолютное позиционирование в то время как сам header имеет позиционирование по умолчанию static, соответственно header img вырывается из потока и позиционируется относительно родителя, в данном случае body. Сам мо себе body и html нельзя ограничить по ширине, если внутри есть элементы выходящие за пределы окна то body,html { overflow-x: hidden !important; } не поможет. Вообще лучше всегда делать обертку всего сайта внутри body и тогда будет работать overflow-x: hidden. Но в данной верстке надо бы и header сделать правильно, так как сейчас это пустышка с нулевой высотой.