You have to remember that the Windows model depends on binary compatibility: the users of software packages typically don't have access to the source code and you can't swap instruction sets and finesse decades of API changes simply by means of some smart macros and recompilation. You have to emulate x86 code and every supported version of every API has to be reproduced exactly and there's a long tail of deprecated-but-supported functionality.
This is why Microsoft is really in a dilemma over ARM. The main selling point of Windows is its compatibility with the software packages customers already have.
Apple got around this several times, but in each case they were moving to significantly faster processor families (which compensated in part but not in full for emulation overhead) and the range of software is sufficiently limited that they could reasonably expect it to be promptly ported to the new native environment.
I think Microsoft, with its much greater legacy problem, will struggle successfully to move its existing code base to another processor architecture unless it also includes some support for the x86 ISA - which would not only mean custom silicon but potential licensing headaches. They'd probably be better off creating a new future platform (perhaps based on something like .Net if they ever solve the UI problem) that's portable and distinctly different and allows new code to target both the old and the new platforms with minimal changes. It would mean maintaining two product lines, but they have most of the code they would need to do it already.