This works approximately:
(defun unfill-email-body ()
(let ((fill-column most-positive-fixnum)
(setq top (point))
;; now go backward by paragraph and unfill them unless the paragraph starts with >
(while (and (> (point) top)
(unless (looking-at ">")
(add-hook 'message-send-hook 'unfill-email-body)
The idea is to just iterate through the body by paragraph and unfill each one as long as it does not start with >.
I say approximately because it seems like some whitespace gets stripped in my setup which means this ends up unfilling the signature since there is trailing whitespace in the signature delimiter defined in message-signature-separator. I could fix that locally but I don't here.