This won't be immediately useful, but there's been a patch proposed for Postgres 15 to allow logging the plan of a running query [1]. Progress seems to have stalled a bit, but it seems like there was a fair amount of interest, so I wouldn't count it out yet. If you have thoughts on the proposed functionality, I'm sure thoughtful feedback would be appreciated.
Didn't something get into v14 about doing ctd range scans, which would allow you to break up a large update/delete into chunks, so you wouldn't do a full seq scan, but you also would avoid needing an index as a proxy for batching records?