A transaction that sits in "pending" isn't lost and isn't half-executed. It's waiting in the mempool because block builders don't find it worth including yet, or because it can't be included until an earlier transaction from your account is. Nothing on-chain has happened, so you can still replace it: speeding up and cancelling are both done by sending a new transaction with the same nonce and higher fees.
Why transactions get stuck
1. The max fee is below the current base fee. Since EIP-1559, every block has a base fee that rises when blocks are full and falls when they're not. A transaction is only eligible when its maxFeePerGas is at least the base fee. If you signed during a quiet period and demand then jumped, your transaction waits until the base fee comes back down, which may never happen.
2. The priority fee (tip) is too low. Even when eligible, builders order transactions by what they earn from them. A tip far below what others are paying can leave you waiting while busier blocks fill up.
3. An earlier nonce is stuck. Transactions from one account are processed strictly in nonce order. If nonce 41 is stuck, nonces 42, 43 and 44 all wait behind it, however high their fees. This is the most common cause when "everything" is stuck at once.
4. A nonce gap. If you sent nonce 43 but nonce 42 was never broadcast (it failed in your code, or was dropped), 43 sits in the node's "queued" pool forever.
5. It was dropped, but your wallet doesn't know. Nodes evict low-paying transactions when their mempool is full, and different nodes see different mempools. The wallet may show "pending" for a transaction that no node is holding any more.
Diagnose it
Look up the transaction on a block explorer or through your RPC, and compare the account's mined and pending nonces:
# Is the transaction known to this node, and what did it offer?
cast tx 0xYourTxHash --rpc-url $RPC_URL
# Current base fee, to compare with the transaction's maxFeePerGas
cast base-fee --rpc-url $RPC_URL
# Mined nonce vs. nonce including pending transactions
cast nonce --block latest --rpc-url
cast nonce --block pending --rpc-url