This would allow wallet operations like funding transactions with smart contract-based inputs such as LN, or any input the Core wallet doesn't know how to sign for.

https://github.com/bitcoin/bitcoin/pull/17211#issuecomment-933674310
const OutputType change_type = wallet.TransactionChangeType(coin_control.m_change_type ? *coin_control.m_change_type : wallet.m_default_change_type, vecSend);
    ReserveDestination reservedest(&wallet, change_type);
    unsigned int outputs_to_subtract_fee_from = 0; 
    for (const auto& recipient : vecSend) {
        recipients_sum += recipient.nAmount;
        if (recipient.fSubtractFeeFromAmount) {
            outputs_to_subtract_fee_from++;
            coin_selection_params.m_subtract_fee_outputs = true;
        }
    }
    
    CScript scriptChange;
    
    if (!std::get_if<CNoDestination>(&coin_control.destChange)) {
        scriptChange = GetScriptForDestination(coin_control.destChange);
    } else { 
        
        
        
        
        
        
        
        
        CTxDestination dest;
        bilingual_str dest_err;
        if (!reservedest.GetReservedDestination(dest, true, dest_err)) {
            error = _("Transaction needs a change address, but we can't generate it.") + Untranslated(" ") + dest_err;
        }
        scriptChange = GetScriptForDestination(dest);