Почему singleton круче global?
Действительно, понятия немного из серии «что лучше, Алла Пугачева, или цветной телевизор». Однако если я правильно понял мысль автора, постараюсь ответить :)

Все очень зависит от используемого языка. Но в целом сразу видятся такие причины:

1. Глобальную переменную может случайно переопределить другой модуль. Получим сложно отлавливаемую ошибку. Класс же, посредством которого реализован паттерн синглтон в большинстве языков переопределить нельзя. Ну или по крайней мере можно получить ошибку компиляции (в компилируемых языках).

2. Область видимости имен классов обычно не зависит от контекста. Глобальная же область переменных в некоторых языках опять же может меняться.
Не понял причем тут синглтоны…
Почему стоит избегать глобальных переменных — варьируется от языка к языку. Например потому, что из за них могут возникать сложно диагностируемые ошибки. Или потому, что глобальные переменные все время висят в памяти, а локальные высвобождаются при выходе из функции.