Porque ao longo do tempo, quando o programa vai crescendo, fica cada vez mais difícil entender o que se passa no código. Como uma global pode ser modificada por qualquer parte do programa, você "nunca sabe" o que vai conter nela. Quando você tem classes/funções bem definidas, fica muito mais fácil entender e manter o código. Entretanto, tem vezes que usar variáveis globais acaba sendo uma boa pedida, geralmente quando você quer testar algo rápido ou fazer um pequeno programa.
Um bom artigo sobre isso, em inglês:
http://c2.com/cgi/wiki?GlobalVariablesAreBadAbraços!