ZFS writes nothing in place. Every change goes to new blocks, and every few seconds a transaction group closes and a new uberblock is written into a ring of them at the front and back of each disk, pointing at the state of the whole pool at that moment. Older uberblocks stay in the ring until overwritten, and older blocks stay on disk until reused. That is the history: a pool has not one state on its disks but dozens, and the latest is merely the one the import tries first.
A pool fails to import when the latest state does not add up: a vdev has lost too many members, a label is unreadable, the latest uberblock points at metadata that fails its checksum after a power cut or a controller that lied about a write. The import then reports what it found, and the dashboard turns it into FAULTED or UNAVAIL. Nothing about that has removed the earlier states. An import at an earlier transaction group, read-only, brings the pool up as it was a few seconds or minutes before the damage, with every dataset intact.
The forum's -F does exactly that, on the originals, by rewinding and then writing new labels to make the rewound state current, discarding what it skipped. -X goes further back and discards more. Both work often enough to be recommended, and both destroy the history that would have allowed a more careful choice. The bench images every disk, imports the pool read-only from the images at the latest consistent transaction, and rolls back only as far as it must, with the discarded transactions still on the images should they hold anything.