Io proverei a guardare il problema da un'angolazione diversa.
Il problema e` quindi tagliare una stringa ma il taglio non deve avvenire all'interno di tag. E` corretto?
Ecco un possibile modo di affrontare il problema:
1. spezzi la tua stringa in tanti pezzi, ciascuno dei quali e` un tag o non contiene tag:
str = str.replace(/\</g, "\n<");
str = str.replace(/\>/g, ">\n");
var vett = str.split(/\n/);
2. rimonti la stringa, spezzando nuovamente, se necessario, ma solo se il pezzo non inizia per <