FA uses Quote -> Order -> Delivery -> Invoice with payments allocatable only to invoices with provisions for advance payments as workarounds.
The Order has the "date of delivery" field which can be different from the date of booking order / invoice.
If the following is done for all invoices, then it can simulate what you want but the real voiding must have something in the memo to distinguish from dummy voiding:
Quote => Order => Dummy Delivery => Real Invoice => Void Dummy Delivery => Make Real Delivery => Attach Real Delivery to Real Invoice or fulfill as new Real invoice after voiding old Real Invoice and suffer tracking issues.
Alternatively make a dummy invoice for the dummy delivery in a dummy company and then populate the real delivery and real invoice by selectively exporting them from the dummy company to the real company.