I had this problem recently, while using git am --reject to apply a bunch of patches. The way I approached it was to massage the .rej file header into something patch(1) would recognize, with
sed -e 's/^diff a\/\(.*\) b\/\(.*\)[[:space:]].*rejected.*$/--- \1\n+++ \2/'
and modified them with emacs (whose diff-mode will update the line counts in the hunks as you modify the patch) and applied them with patch.
My workflow ended up looking like this:
$ (for i in $(find . -name \*.rej); do
sed -e 's/^diff a\/\(.*\) b\/\(.*\)[[:space:]].*rejected.*$/--- \1\n+++ \2/' -i $i &&
emacsclient $i &&
patch -p0 < $i;
done) && git add -u && git clean -xdf && git am --continue
with suitable macros setup in emacs for the recurring cases. Not the most elegant approach, but it worked.