TAP is a virtual interface. They are generally used to allow your machine to connect to a VPN or some other network tunnel (such as a client VM). Basically they create a link between your machine's network stack and somewhere else at the layer 2 level. Generally they aren't used to directly forward traffic to/from a physical interface as normally you would use a router for that (nftables, etc.) As an example, A2SERVER's MacIP support creates an IPv4 network with a TUN interface that macipgw feeds traffic to. It connects to the rest of the network by using nftables and a NAT gateway similar to what your home router does with the internet.
libpcap on the other hand has raw access (with root permission) to traffic on network interfaces on the system. This allows you to see all packets and inject packets on a specified interface (this is how tcpdump and WireShark can capture traffic). This is similar to what VirtualBox does in "bridged" networking mode. I think there are other methods to do this in Linux, but generally client applications are supposed to talk via a layer 3 network stack on an interface (ie: use sockets via the kernel's IP stack, or AppleTalk). That being said, you could in theory connect your TAP interface as another port using netatalk's atalkd. It would be pretty redundant, but gets the packets onto a physical network without needing root. The downside is you are dependant on the host's AppleTalk stack and netatalk still.
libpcap on the other hand has raw access (with root permission) to traffic on network interfaces on the system. This allows you to see all packets and inject packets on a specified interface (this is how tcpdump and WireShark can capture traffic). This is similar to what VirtualBox does in "bridged" networking mode. I think there are other methods to do this in Linux, but generally client applications are supposed to talk via a layer 3 network stack on an interface (ie: use sockets via the kernel's IP stack, or AppleTalk). That being said, you could in theory connect your TAP interface as another port using netatalk's atalkd. It would be pretty redundant, but gets the packets onto a physical network without needing root. The downside is you are dependant on the host's AppleTalk stack and netatalk still.