I think you could make this simpler.  What if each time you get an overflow event you remove the last 3 or 4 characters of textContent and add "\u2026" to the end?  Don't bother with the counter and with dataset.title.  Just shrink the text content

var title = el.firstElementChild;
title.textContent = title.textContent.slice(0, -4) + "\u2026";

By going more than one character at a time, you'll more quickly find a size that fits.  And if you don't have the counter, you don't even need the underflow handler, I think.