Das Pausieren löst man i. d. R. dann so, dass man im "EventHandler" (also in deiner GameLoop) einfach nicht mehr den Countdown updatet. Deshalb ist es hier geschickt, wenn man nur ein einziges TimerObjekt hat, dass immer die Framezeit misst (einfach wäre ein fixed Timestep mit z. B. 60FPS) und diese so genannte delta-time wird allen GameObjekten in der update-Funktion übergeben. Du willst ja das Pausieren an einer einzigen Stelle handhaben, und nicht überall eine pause() Funktion einfügen müssen.
Eine einfache Timer Klasse merkt sich einfach einen Start-Zeitpunkt (z. B. std::chrono::steady_clock::now()) und wenn Du wissen willst, wie viel Zeit seither vergangen ist, holst Du dir einfach wieder den aktuellen Zeitpunkt und subtrahierst davon den Start-Zeitpunkt. Als Beispiel könnte auch z. B. sf::Clock dienen.
Das Verlangsamen oder schneller Laufen der Zeit könnte man mit einem Faktor lösen, der mit der Framezeit multipliziert wird. Ich hatte mal Zeitlupe implementiert, und habe es so gemacht, wenn ich mich richtig erinnere (z.B. mit Faktor 0,1 multiplizieren).