I've seen it done fairly well, or at least 'doable if wanted but not turned on'.
IME, ideal state is that 'soft deletes' are kept primarily for easing debugging, and the 'soft delete' is kept until archival of soft deleted events occurs (also primarily for debugging/compliance, but sometimes having 'recent data' closer to runtime makes debugging cycles easier...
The biggest problem in doing so successfully is getting the design of things right, which is hard to get buy-in on.