It is not just telnet. I don't believe that you can find any networking program supplied by HP or Sun that doesn't go through /etc/services. This includes both clients and servers.
I just downloaded the source code for httpd-2.0.43 from
http://httpd.apache.org/download.cgi and I notice that httpd-2.0.43/srclib/apr/network_io/unix/sa_common.c line number 595 is certainly attempting to query /etc/services via a getservbyname() call. I'm not going to actually build it to see it works or not. I'll take your word that it doesn't. But that's a shame. I can only hope that its attempt to use gethostbyname() is more successful.
Any network programming book will tell you to use getservbyname()/gethostbyname() or getaddrinfo(). But the programs that play by the rules may be outnumbered by the programs that don't. Anyway I still think that /etc/services is where I would start to try to change a port number.