解決

ちゃんとDOMを通じて弄りましょう、ということらしいです。

window.hoge = function(){ ...; }
var i = document.createElement("input");
i.type = "button";
i.value = "hoge";
i.addEventListener("click", hoge, false);
nanika.appendChild(i);

innnerHTMLを通じて操作したのと、DOMオブジェクトを通じて操作したのとで振る舞いが違うというのは、かなりボク的に違和感なんですが…まあ何かしら都合が悪いんだろうなあ。