I was wondering if TCP can provide bandwidth and delay guarantees? Or does it have to implemented on the application layer?
There are no bandwidth or delay guarantees, neither in the application layer, nor in the transport layer, nor in the link layer. With packet switching, all packets compete for bandwidth on congesting links. Congested packets can be queued for (very) short periods/bursts but ultimately they're dropped.
There are several priorization schemes (quality of service) that - if configured and used correctly - may make some guarantees about bandwidth and maximum delays.
The common approach for providing guarantees is to increase bandwidth until there can be no more congestion. If that's out of the budget range you work around the problem using QoS.
To guarantee bandwidth or delay, a continuous channel from source to destination has to be arbitrated and established. While that is the rule for circuit-switched networks, it is not normally possible with packet-switching.
The main point is that intermediate, packet-switching devices - routers and switches - are essentially stateless and know nothing about the (logical) connections running through them. They simply handle one packet at a time and remember nothing about past packets.