Почему программа может использовать больше динамической памяти, чем выделил `malloc()`?
Потому что C не контролирует использование памяти программой. Любой контроль на совести разработчика.
Вы лезете не в свою память. Программа может упасть, вы можете перетереть значение каких-то других ваших переменных.

В вашем случае - вам повезло. Видимо, на вашем конкретном компьютере ваша конкретная операционная система в этот конкретный момент времени выдает вам 1 байт, который лежит внутри выделенной вашему приложению странице памяти и там дальше нет каких-то ваших переменных. Так не обязано происходить. Вы запустите вашу программу в другое время, добавите туда еще переменных или выделения памяти или скопируете чуть более длинную строку, и программа может запросто упасть.