We have done the plugin as you have descrived . under client profile a new link called merge invoices . that list the invoices (Open / Closed / Void / All). the admin can select multiple invoices to merge them, we are not coping the lines, but movind them to the target invoice, then we create a new line with total 0 in old invoice, adding a note and voiding it, then updating the service_invoices if exist, and the transaction if exist. finnaly we calcul the total and paid ...ect with setClosed() .
the limitation is only in currency, the merged invoices should has the same currency.
as now we can only think only in adding a ACL permissions for staff.