So a tunnel is a form of encapsulation. It’s when you take a packet and wrap it up in something else before sending it on to the destination. Tunnels come in many forms, you have GRE tunnels, MPLS tunnels, IPSec Tunnels, VXLAN Tunnels, etc. So it’s a very important concept to understand within networking.
We use tunnels when we don’t want the network to care about the contents. This can be for something like MPLS, where the backbone doesn’t know the destination routes, so we “tunnel” it to the far side, we only tell the backbone about what the far side is, which it knows how to get to, but then we remove the encapsulation on the far side, that side has the route to the destination so it forwards it on.
We use tunnels for security. We can take a packet and encrypt all of it, then VPN it to the far side, making sure that if someone were to get it, they wouldn’t be able to read the contents.
We use tunnels to expand features. GRE Tunnels can convert multicast packets to unicast, allowing routing protocols to form neighbor relationships on links they normally wouldn’t be able to, or VXLAN to extend layer 2 over layer 3.
So, there isn’t a single usage for tunnels, and there isn’t a single definition used, it always depends on what type of tunnel we’re talking about. At the core, a tunnel is us just wrapping up a packet so that the network doesn’t have to interact with what’s in the packet, only the outside wrapper. Think of it like a package. I could slap an address label on a bag of candy and send it through the mail, that’s how normal packets work. Or, I can choose to wrap it up in a box. I might do that for security, I might do that because it’s the only way the destination, or even the postal service, will accept it. I might do it because I want to send additional stuff, or additional types of stuff. I might even have to use different types of boxes, but they are all boxes.