PSBTs were supposed to fulfill this dream, but sadly wallets use them differently and don't expose all the functionality. You could probably do this using the bitcoin core cli but it'd be pretty involved.