Thanks to some guidance by Nicolas Goaziou, I created a solution that sorts the way I want by taking advantage of the user-defined
sorting strategy:
(defun hw-org-agenda-sort-habits (a b)
"Sort habits first by user priority, then by schedule+deadline+consistency."
(let ((ha (get-text-property 1 'org-habit-p a))
(hb (get-text-property 1 'org-habit-p b)))
(when (and ha hb)
(let ((pa (org-get-priority a))
(pb (org-get-priority b)))
(cond ((> pa pb) +1)
((< pa pb) -1)
((= pa pb) (org-cmp-values a b 'priority)))))))
(setq org-agenda-cmp-user-defined 'hw-org-agenda-sort-habits
org-agenda-sorting-strategy '((agenda time-up user-defined-down habit-down)
(todo priority-down category-keep)
(tags priority-down category-keep)
(search category-keep)))
Not the most elegant solution, but it does the job.