Примерное описание логики без реального кода:
1) Получаете размеры секций, на которое будут ориентироваться эти навигационные якоря (height/offsetTop).
2) Навешиваете на глобальный скролл обработчик, который на основе текущего scrollTop и сравнения с размерами и пункта 1 будет понимать, в какой же секции вы сейчас находитесь и навешивать к нужному кружочку класс active.
3) Полируете все это дело. Нужно будет навесить обработчик на window resize, чтобы пересчитывать размеры из пункта 1. Можно будет даже сделать, чтобы из одного кружка шла линия прогресса в другому (при разных размерах секций), но это уже из разряда извращений :)