Foremost, Apple has a history of writing good, platform independent code. They can squeeze performance out of the same hardware that others can't. And rumour has it that even back in the PowerPC days, they maintained an x86 version of MacOS just as an exercise - to verify that there are no undue dependencies in their code. And that's how it should be. That's what you do at a university. It's the optimizations where switching could get expensive but it's nothing like porting a messy codebase with a gazillion dependencies.
Second, they have a way of putting pressure on developers when it comes to supporting their new products. This is the reason why iPad and Watch have such support. ARM wouldn't be that much of a problem if all applications for Windows were running on .NET.
Which brings us to the Windows legacy. It's the strong point of Windows. Few people like that system. We often have it because something we want or need requires it. There are tonnes of poorly written code, there are tonnes of abandoned code and there are tonnes of custom code that was written to order. A lot of custom code isn't very good as it would cost extra and few people think ahead and they lack the expertise to judge such things. If you want a simple life, just burn the bridges and throw the old software overboard. Apple did something like that as well IIRC (when transitioning from PowerPC). But then Windows lose a significant selling point. A dilema. So, part of the reason why Apple has it relatively simple is that they went through it once before, they learned from it and they weren't afraid to burn the bridges. If you wanted to stay on the platform, you had to adapt. And the old was lost. A luxury they could afford as they never were in the same position as Microsoft. Some of the production code still in use on Windows remembers DOS. Nobody probably knows how it works or where are the codes or perhaps even how to read them if they have them. That's what happens when IT is managed by clueless people.