Вероятно, есть способ сделать это, изменив или изучив поведение isearch, но лучше всего написать внутренний цикл в Lisp и запустить внешний цикл как макрос (или записать его также в Lisp). Макросистема великолепна, но ее мощность ограничена, и звучит так, будто вы пытаетесь сделать что-то более мощное, чем оно может справиться (легко).
В зависимости от того, что вы делаете, вы также можете использовать выражения Lisp в строке замены регулярного выражения замены. Начиная с GNU Emacs 22, вы можете использовать выражения Lisp в строке замены, экранируя их с помощью "\,".
Я уверен, что есть способ достичь того, о чем вы просили (в конце концов, это Emacs), но это, вероятно, больше проблем, чем стоит.