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