Генератор получился такой, но не ясно, как выбрать заголовки только у текущего элемента 'make-toc'. Кроме того, список, конечно, кошернее будет. Но не придумаю как вложенность правильно отработать.
$('.make-toc').each(function (cInd) {
var source = $(this);
var toc = document.createElement('div');
var s = '';
toc.className = 'toc';
$('h2, h3').each(function (hInd) {
var h = $(this);
var headerId = 'header' + cInd + '_' + hInd;
var tag = h.get(0).tagName.toLowerCase();
h.before("<a id='" + headerId + "'></a>");
s += "<" + tag + "><a href='#" + headerId + "'>"
+ h.text() + "</a></" + tag + ">";
});
toc.innerHTML = s;
source.before(toc);
});