I always thought that define was just controlling what functions were exposed in headers, so what was available at compile time.
The PE has an OS version number that I think is what controls what it can run on as far as the loader is concerned, assuming that all imports it tries to acquire are available.
(My limited knowledge may be outdated though!)