Because it processes one event at a time and cannot see the future by construction, this design eliminates whole classes of leakage. It also lets you model realistic behaviour: partial fills, rejected orders, margin checks, and position limits that actually bind.
The bigger payoff is code reuse. If the strategy component is identical in backtest and live, with only the data and execution adapters swapped, then a large share of live-vs-backtest-divergence disappears because there is no second implementation to drift.
The cost is speed and complexity. Event-driven runs can be a hundred times slower, which discourages broad parameter sweeps. The common workflow is to screen with a vectorised-backtest and validate finalists event-driven before anything goes near real money.
Related: vectorised-backtest, fill-assumption, live-vs-backtest-divergence, order-reconciliation