Principalmente razões de segurança.
Pelo que entendi, quando um serviço do Windows cria controles de GUI, como um MessageBox, eles normalmente eram vistos apenas na sessão em que os serviços são executados, ou seja, na Sessão 0, que também costumava ser o primeiro usuário conectado localmente ou por alguém fazendo logon usando mstsc / admin. Portanto, esse usuário veria esses controles e poderia interagir com o serviço.
Mas, por razões de segurança, a Sessão 0 agora está reservada e o primeiro usuário a fazer logon receberá uma nova sessão e, portanto, não verá os controles da GUI.
Como isso interrompe muitos serviços, para compatibilidade, existe um processo (consulte este blog do MSDN) que tenta detectar se alguma mensagem está sendo exibida e aparece com um aviso 'Um programa em execução neste computador está tentando exibir uma mensagem 'e permite visualizar ou ignorar a mensagem.
A Microsoft possui um WhitePaper sobre esse assunto, que pode ser baixado aqui
Eu também suspeitaria que outro motivo menor é porque o recurso foi mal utilizado / mal interpretado e levou a projetos ruins. Por exemplo, eu costumava ter um servidor antigo com um serviço de terceiros que exibia algumas notificações / erros usando uma caixa de mensagem em vez de gravar no log de eventos. Mas nunca efetuei logon localmente e raramente efetuei logon no modo de administrador e, portanto, não veria as mensagens.