Questa può essere una bozza. Poi bisogna sistemare il layout in modo che non sfalsi.
Inoltre si può modificare per fare avanti e indietro se serve.
codice:
<html>
  <head>
    <style type="text/css">
      h1 {display:inline;}
    </style>

    <script type="text/javascript">
      var objTitolo;
      var testo;
      var posZoom = -1;
      var intervallo;
      
      function zummalo() {
        objTitolo = document.getElementById("idTitolo");
        testo = objTitolo.innerText.replace(/\s+$|^\s+/g,""); //testo trimmato
        intervallo = setInterval("zoomLettera()", 500);
      }
      
      function zoomLettera() {
        var zoomStr = " ";

        do {
          posZoom += 1;
          zoomStr  = testo.charAt(posZoom);
        } while (zoomStr == " "); //Si saltano gli spazi

        var leftStr  = testo.substring(0, posZoom);
        var rightStr = testo.substring(posZoom + 1);
        
        objTitolo.innerHTML = leftStr + "<h1>" + zoomStr + "</h1>" + rightStr;
        
        if (posZoom == testo.length) clearInterval(intervallo);
      }
    </script>
  </head>
  
  <body onload="zummalo();">
    <h3 id="idTitolo">PROVA ZOOM</h3>
  </body>
</html>