I'm creating a web application that will allow users to both deposit and withdraw Bitcoin (or any other cryptocurrency that would be possible but mainly looking at BTC atm) and am looking at APIs that can potentially help with designing this system.
If you were planning to simply accept payments and delivering products to customers, using an API would've been fine. But in this case, I'd say that running your own bitcoin node and communicating with it is a better idea. See this[1][2].
The first link is for you to understand how to accept payments, while the second is a guide for building your own API in nodejs (it's meant to help you understand how to use the JSON RPC).
EDIT: I was also wondering if it is common to see websites/groups using blockchain based transaction systems creating their own in-house transaction system without any API
Yes. Most of gambling sites and exchanges out there don't use any third party APIs.
[1]
https://bitcoin.stackexchange.com/questions/34258/accept-bitcoin-payments-for-orders-without-3rd-party-software[2]
https://medium.com/@peterjd42/build-your-own-bitcoin-api-using-node-js-and-bitcoin-core-251e613623db