You’re describing the Merkle root of transactions in an UTXO-based chain: Block Chain — Bitcoin.
You’re describing the UTXO data model: Practical parallel transaction validation without state lookups using Merkle accumulators.
Just un-apply the state deltas.
Since you don’t need to compute a state root at every block, you can simply apply all the state updates from genesis (very cheap) and compute the final root. Signature verification can be skipped if we only care about verifying the integrity of a state snapshot, not its correctness: bitcoin/doc/release-notes/release-notes-0.14.0.md at cc9d09e73de0fa5639bd782166b171448fd6b90b · bitcoin/bitcoin · GitHub.
One way is by changing the block format to order inputs and outputs: Compact Fraud Proofs for UTXO Chains Without Intermediate State Serialization. Then you can provide exclusion proofs for each block that a UTXO wasn’t spent. Linear in the number of blocks unfortunately, so maybe not applicable to on-chain light clients.