Вопрос в кривизне кода. Например, значения размером в машинное слово синхронизировать необязательно. Но вдруг на каком-нибудь ARM под WinCE это не так? Ставить везде синхронизаторы или написать в комменте про особый случай? Так же со строками. Возможно, там все продумано и потокобезопасно. А за переданные в WinAPI как PChar значения никто и не ручался.
не сказал бы, что не обязательно ;)
вообще, чтобы было понятно в каких случаях что надо синхронизировать, в языках есть т.н. модель памяти. не во всех, к сожалению.