Sadly no mention of SCTP, which, if you don't need to communicate with arbitrary hosts over the Internet, sits in a nice middleground between TCP and UDP.
SCTP tries to be the best of the two, and as such it feels "overengineered". But besides that, the main problem I see is that you can't communicate with arbitrary hosts. There is a SCTP implementation in the Linux kernel, besides the 'reference' one that is developped against FreeBSD. For OS X, you need to install a kernel extension and for Windows I don't really remember TBH.
Of course, you could use a userspace stack but you still have another problem: all the middleboxes between you can your destination. Anything that tries to be smart about your packets (NAT, proxies, younameit) may break your connectivity simply because it only understands TCP and UDP. I guess you could use UDP encapsulation but personally I'd start questioning whether picking SCTP as a transport protocol is worth all this trouble.
Most SCTP use (WebRTC) is UDP-encapsulated, needs no kernel support, and works just fine with NAT. The UDP encapsulation doesn't add any "trouble" compared to your own ad-hoc UDP-encapsulated protocol, but you still get the advantages of a properly engineered IETF designed standard protocol.
Of course, you could use a userspace stack but you still have another problem: all the middleboxes between you can your destination. Anything that tries to be smart about your packets (NAT, proxies, younameit) may break your connectivity simply because it only understands TCP and UDP. I guess you could use UDP encapsulation but personally I'd start questioning whether picking SCTP as a transport protocol is worth all this trouble.