look-behind をそのように実装した場合、"(?<hoge)." のような検索をすると
一文字ずつずらしながら "hoge\=" を検索することになる。

look-behind も look-ahead も (point) と bound の間にあることにして
こんなので十分なんじゃないか?

(defun re-search-forward-lb-la (lb-regexp regexp la-regexp
&optional bound noerror count)
(let ((lb-depth (regexp-opt-depth (concat "\\(" lb-regexp "\\)")))
(re (concat "\\(" lb-regexp "\\)\\(" regexp "\\)\\(" la-regexp "\\)"))
(count (or count 1)))
(save-excursion
(while (and (>= (setq count (1- count)) 0)
(re-search-forward re bound noerror))
(goto-char (match-beginning (1+ lb-depth)))
(re-search-forward regexp (match-end (1+ lb-depth)))))
(if (match-data 0)
(goto-char (match-end 0))
(unless (eq bound t)
(goto-char bound))
nil)))