Thanks everyone, I'm grateful for people trying to help. If StackOverflow lets me, I will upvote each attempt to help.
I'm answering my own question in hopes it helps someone else.
I learned it's not quite true that sed cannot handle LFs. It can handle them, but only when it's writing them. Not when reading them.
So, I couldn't completely do the job with sed, as I hoped. I like sed's in-place switch, which seems less messy than creating another file and thus appeals to my OCD.
The format of my file was :
Mary(LF)
Smith(LF)
(SUB)(LF)
John(LF)
Public(LF)
(SUB)(LF)
and I wanted a result of:
Mary(TAB)Smith(LF)
John(TAB)Public(LF)
So, I wanted to change LF to TAB, and LF-SUB-LF to LF.
I solved my problem by first using TR to change all LFs to TABs. Couldn't use sed for this.
# change LFs to TABs ... so grep can later treat entire file as one line
tr '\012' '\011' < comengo.extract.txt > comengo.extract.out
mv comengo.extract.out comengo.extract.txt
That way, sed can now treat the entire file as one line. sed only likes to treat files line-by-line, so I made the whole fine one single line.
The second step was to let sed jump in, and make the changes I wanted. The gist of my question was "how do I represent non-printing ascii characters?".
My previous attempts were failing because I was trying to use \x12 in the sed search string. Now that the LFs were replaced, I used an uninterrupted sequence of hex numbers.
# changes (tab)(sub)(tab) to just (sub)
sed -i 's/\x09\x1A\x09/\x1A/g' comengo.extract.tx
Then I restored LFs to the file by using sed, which can write LFs
# (sub) to (tab)(lf)
sed -i 's/\x1A/\x0A\x09/g' comengo.extract.txt
And that worked like a charm.