Стандарт C ++ не определяет порядок, в котором создаются статические объекты. Поэтому, если вам нужна некоторая иерархия в статических объектах, вам нужно, чтобы они зависели друг от друга (например, один должен быть членом другого). Конструкция из книги гарантирует такое поведение.
Например, гипотетическому игровому движку нужны звуковые и графические движки для работы, если вы объявляете их как статические объекты в отдельных блоках компиляции и используете один из другого, нет гарантии, что он не потерпит неудачу, если вы не кодируете их так, как это нужно. Вы указали.
См. C ++ faq запись для второй части вашего вопроса.