That depends. Much of what people _think_ is cruft is due
to ignorance of TCP or IP. Adding 40 bytes of header (IP)
clearly isn't the root cause of poor performance. Copy-on-send
semantics of sockets is, e.g.; there is nothing about TCP/IP
that requires the latter.
If there isn't a loss, an efficient TCP implementation doesn't
anything different than these custom protocols do. The difference
is that the assumption of a lossless network has led some people
to use custom protocols that simply don't check. It isn't
the same - what you get with TCP is the knowledge that the
transfer has occured, not the assumption.
Finally, there are lots of things about TCP that aren't
required in local or private nets. I.e., I hear SC jocks
complain about the requirement that TCP send an ACK every
two packets, or a too-small initial window size. The TCP
spec allows implementations that are local (i.e., don't
interact with the Big-I Internet) to pick local values
of initialization, retransmit, MTU, packets per ACK,
and MSL timeouts.
Some of these jocks would also like to do real work,
not write protocols, or reinvent capabilities of existing
protocols (flow-control, error recovery, etc).
Especially those who work outside their own box (using
outside networks to talk to other components/databases).
But agreed, there is custom work going on there too.