Esta pode ser a pior ideia que existe, mas talvez você possa simplesmente calcular o tempo entre agora e a data final uma vez, encontrar o número de intervalos desejados e chamar
setInterval
e decrementar manualmente o valor. AKA:
var initialTime = new Date();
var endTime = /* Your Time when the thing is over */
var intervalId = setInterval(function()
{
// Every second, decrement the counter by 1 second.
// if counter is done, show end and then
clearInterval(intervalId);
}, 1000);