Как сделать cекундомер без setInterval и setTimeout?
Я за RAF! : )

let rafSeconds = 0;
const rafStart = Date.now();
const tick = () => {
  const seconds = (Date.now() - rafStart) / 1000 | 0;
  if (rafSeconds !== seconds) { // секунды изменились!
    rafSeconds = seconds;
    // TODO: отрисовать новые секунды
  }
  window.requestAnimationFrame(tick);
}

tick();
Можно через настройку обновления страницы <meta http-equiv="refresh" content="1">в каком нибудь фрейме, где на onload вызывается дочерний метод, но это садамаза.
НЕ НАДО ТАК ДЕЛАТЬ
----------------------

setInterval и setTimer самый правильные методы, только интервал в них нужно ставить не константное значение, а вычислять исходя из разницы ожидаемого времени и текущего (если оно больше нужного, секунд прибавлять не 1 а на сколько оно дальше убежало)