indent-for-tab-command 自体にその機能あるんじゃね?
正攻法でいくならこっちのほうがいいと思う。
ただ completion-at-point-functions はバッファローカルに設定上書きされるから
いちいちモード毎の hook で有効にしてやらなきゃいけないのが面倒かもね。

;; インデント済みなら completion-at-point を呼ぶ
(setq tab-always-indent 'complete)

;; 非 interactive で引数なしでもエラーにならない hippie-expand
(defun hippie-expand-at-point ()
(hippie-expand 1))

;; completion-at-point で呼び出される関数群に hippie-expand 追加
;; バッファローカルに設定されることが多いので使いたいモードのフックに入れる
(add-hook 'completion-at-point-functions 'hippie-expand-at-point nil t)