That reason is developer incompetence.
MSDN is full of posts and articles how to be a nice guy and run as user, unless of course the application needs to do some low system level calls.
And even then, there are ways to split the architecture between privilege levels.