Tem a ver com o subconjunto de recursos disponíveis no sistema operacional especificado (Windows 7 ou 8, por exemplo).
Por exemplo, se (como programador) eu uso a funcionalidade cool 'preview da barra de tarefas' e adiciono botões à visualização da barra de tarefas do meu ícone, estou usando um conjunto específico de instruções de programação (conhecido como API). Esta API está disponível apenas para o sistema para o qual foi projetada. Não é diferente da diferença entre os programas compilados para diferentes sistemas operacionais.
Essa é uma razão pela qual os programas funcionarão apenas para determinados sistemas operacionais (independentemente de o SO ser mais novo que o programa ou não).
Outra razão é que o programador compilou especificamente o programa para direcionar apenas um sistema operacional (isso acontece mais do que você imagina). Nesse caso, quando o programa é executado, um determinado sinalizador é iniciado e diz "não compatível com esta versão do Windows" ou qualquer que seja o caso.
Pode haver outras razões, mas as mais comuns são o uso de uma API muito específica ou a criação do programa especificamente para um sistema operacional.
edite: esqueci de mencionar que o próprio sistema operacional pode ser programado para 'não funcionar' com alguns outros programas. Existem muitos jogos criados para o Windows XP que funcionarão com versões anteriores do Windows (2000 down), mas simplesmente NÃO funcionarão com o Windows 7+. Isso pode ser devido a várias razões (incompatibilidade de API / driver, por exemplo) que o próprio Windows pode 'bloquear' por motivos de segurança / estabilidade.