I've been playing with this rust library recently:
https://bitcoindevkit.org It gives a really nice wallet abstraction (create a wallet struct with descriptors, sync balances using electrum, bitcoin-rpc, or other protocols, then generate some addresses, sign psbts, broadcast transactions, etc). There are libraries in most major languages to abstract out the protocol bits and make it easier to write wallets or other software that has to handle transactions. bitcoinj is a popular java library, for example.