I'm not sure which danger you're seeing here. Imo we need to choose
between heap_inplace/heap_update for VACUUM/ANALYZE because one is allowed to run in a transaction, and the other is not. It simply *can't* be safe for ANALYZE to set things like relhastriggers = false using heap_inplace(). There's problems with both it rolling back and thus undoing the action that allowed relhastriggers = false to be set and scenarios where it's not ok that other backends can see that value before the transaction committed.
Hm, I was wondering about the potential effects of VACUUM FULL or VACUUM ANALYZE, but as they cannot run in a tx block... Btw, I have just put my hands on this code and made the attached to make vac_update_relstats able to do a transactional update. It looks to work fine with only a check on the flags of vacuum statement.