Например, статический класс может требовать тяжелой инициализации.
У одиночки она произойдет только при первом вызове.
Одиночка позволяет аккуратно создать глобально доступный статический объект, причем только в том случае и тогда, когда он действительно понадобился.
Есть вариант, что данные для самого создания одиночки появляются по мере работы кода, заранее его создать просто не получится.
Ну, и во-первых, это красиво :)