Would it be completely unreasonable to allow `fundrawtransaction` to use unsafe outputs?

I understand this means the resulting transaction may be invalidated whenever the unsafe output I'm relying one disappears (e.g. because the transaction that produced it was RBF-ed) but in my case that's ok, I'll react to that and re-publish the tree of child transactions accordingly.

But let me know if you think that's too much of a footgun for users, in that case I'll architect my solution differently.
for (const auto& entry : signing_provider.keys) {
        const CKey& key = entry.second;
        new_spk_man->AddDescriptorKey(key, key.GetPubKey());
    }
     Top up key pool, the manager will generate new scriptPubKeys internally
    if (!new_spk_man->TopUp()) {
        WalletLogPrintf("Could not top up scriptPubKeys\n");
        return nullptr;
    }
     Apply the label if necessary
     Note: we disable labels for ranged descriptors
    if (!desc.descriptor->IsRange()) {
        auto script_pub_keys = new_spk_man->GetScriptPubKeys();
        if (script_pub_keys.empty()) {
            WalletLogPrintf("Could not generate scriptPubKeys (cache is empty)\n");
            return nullptr;
        }
        CTxDestination dest;
        if (!internal && ExtractDestination(script_pub_keys.at(0), dest)) {
            SetAddressBook(dest, label, "receive");
        }
    }
     Save the descriptor to memory
    auto ret = new_spk_man.get();
    m_spk_managers[new_spk_man->GetID()] = std::move(new_spk_man);
     Save the descriptor to DB
    ret->WriteDescriptor();
    return ret;
}