Depois de fazer mais algumas pesquisas sobre essa questão, descobri que há basicamente duas razões pelas quais um binário às vezes não funciona em uma distribuição diferente (com o mesmo hardware) e ambas envolvem bibliotecas compartilhadas. Já que as outras perguntas similares têm respostas obtusas bastante obtusas que não deixam isso claro, estou postando uma resposta simplificada aqui.
(1) A primeira questão é que as bibliotecas compartilhadas podem estar localizadas em locais diferentes em distribuições diferentes. Isso não deve importar, porque os aplicativos devem sempre procurar por bibliotecas no LD_LIBRARY_PATH. No entanto, aparentemente alguns aplicativos mal escritos não usam LD_LIBRARY_PATH, mas usam um caminho codificado para uma biblioteca, resultando em uma incompatibilidade de nível de distribuição.
(2) A segunda questão é que as bibliotecas compartilhadas podem variar de distribuição para distribuição. Geralmente são apenas funções relativamente obscuras ou avançadas que são diferentes, mas se o aplicativo usar uma chamada de API que por algum motivo esteja no .so de uma distribuição, mas não presente na de outra, haverá uma incompatibilidade. É uma espécie de análogo ao "inferno DLL" em um PC.