Core changes are needed for the reissue invoice page that I wrote to work because although it is basically a copy of the void page, it then calls the order entry, delivery, and invoice pages and then expects control to be returned back to the calling page rather than continue to the standard completion pages.
So if one were to create an extension without core changes, the extension would have to contain all the code from the void page and these other pages in the extension itself. It would also need a way of selecting the invoice to be reissued.
However, I prefer the somewhat core-integrated approach that I took, largely because the code is much simpler but also because the link to the reissue page (reissue icon) is on the list of customer transactions inquiry page, making it easy to find.