Мастер-таймер запускается на сервере. Вернее, там отсчитывается время с кторого и до которого идёт приём событий от пользователей.
Для юзера так же важна точность времени. Поэтому на клиенте надо получить точное время окончания игры. Для синхронизации времени клиента с сервером через небыструю, с меняющейся на ходу задержкой, сеть есть протокол синхронизации времени NTP (
как работает NTP).
Вам понадобится аналогичный алгоритм, но не устанавливающий системное время на клиенте, а получающий клиентскую дату-время, соотв. моменту окончания счетчика на сервере.
Например, на сервере игра заканчиваются в 12:34:56. Сейчас на сервере время 01:23:45 (предположим, она не 49 с идёт, а гораздо дольше). А на клиенте сейчас 04:21:00. Задача получить время на клиенте, когда на сервере наступит 12:34:56.
Первый ping ушёл с клиента в 04:21:00, и вернулся с серверным временем 01:23:47 через 3 секунды в 04:21:03. Считаем, что ответ сервера пришёлся на середину нашего отреза в 3 секунды. Из этого получаем клиентское время, когда наступит конец игры.
Эти пинги можно повторять снова и снова, уточняя время окончания. А таймер обратного отсчёта запускайте setTimeout'ом в небольшой промежуток меньше секунды, напр. 200ms. И пусть он показывает, сколько осталось до уточнённого момента конца игры.