А чем плохи setInterval и setTimeout? Он как раз идеально для этого подходит, тот же requestAnimationFrame (насколько помню) может не одинаковые интервалы давать.
Вам нужно всего три размеченных элемента и кнопка. При нажатии запускаем функцию, которая каждую секунду инкрементирует значение секунд. Как только оно будет равно 60, то значение обнуляем и начинаем считаю секунды заново, а минуте добавляем +1. То же самое и с часами.
При повторном нажатии на кнопку интервалы останавливаются. Вот и весь секундомер.