When you say that a special relay network might be more "smart about replacement" in the context of ANYPREVOUT*, do you mean these nodes could RBF parts of a package like this:
- Package A = UpdateTx_A(n=1): txin: AnchorTx, txout: SettlementTx_A(n=1) -> HtlcTxs(n=1)_A -> .chain of transactions that pin UpdateTx_A(n=1) with high total fee, etc.
And a new package with higher fee rate versions of ANYPREVOUT* transactions in the package, but otherwise lower total fee:
- Package B = UpdateTx_B(n=1): txin: AnchorTx, txout: SettlementTx_B(n=1) -> HtlcTxs(n=1)_B -> low total fee package
Relay just the higher up-front fee-rate transactions from package B which get spent by the high absolute fee child transactions from package A:
- Package A' = UpdateTx_B(n=1): txin: AnchorTx, txout: SettlementTx_B(n=1) -> HtlcTxs(n=1)_A -> ...chain of up to 25 txs that pin UpdateTx(n=1) with high total fee, etc.
In general, SIGHASH_NOINPUT makes these issues much, much simpler to address, but only if we assume that nodes can
somehow be "smart" about replacement when they see a SIGHASH_NOINPUT spend which can spend an output that something else
in the mempool already spends (potentially a different input than the relaying node thinks the transaction should
spend). While ideally we'd be able to shove that (significant) complexity into the Bitcoin P2P network, that may not be
feasible, but we could imagine a relay network of lightning nodes doing that calculation and then passing the
transactions to their local full nodes.