Could I suggest that org-mobile-pre-push-hook is processed at the start of the org-mobile-push function before the checks? That way it can be used to properly setup mobile e.g using auth-source for the mobile password.
(add-hook 'org-mobile-pre-push-hook '(lambda() (setq org-mobile-encryption-password (funcall (plist-get (car (auth-source-search :host '("orgmobile"))) ':secret)))))