Yes, but the vast majority of network traffic these days is TCP and very, very rarely does that cause a problem because applications already need to have logic to handle failures which cannot be solved at the transport level. There is a meaningful difference between theoretically perfect and close enough to build even enormous systems with high availability.
Your second camp is the latter half of my first sentence. As a simple example, the transport layer cannot prevent a successfully-received message from being dropped by an overloaded or malfunctioning server, duplicate transmissions due to client errors, etc. so most applications have mechanisms to indicate status beyond simple receipt, timeouts to handle a wide range of errors only some of which involve the transport layer, and so forth. Once you have that, most applications can tolerate the slight increase in TCP failures which a different protocol would prevent.
TCP guarantees order [as long as the connection is active] but it is far from being 'perfectly reliable'.
Example: sender sends, connection drops, sender has no idea whether the receiver received.
In other words, it works until it doesn't. The fact that sometimes it doesn't means it's not perfect.
TCP is a great tool but it doesn't violate the laws of physics. The 2 generals problems is and will always be impossible.