PF's scrub reassemble tcp for example will make sure that the TTL can't be lowered in an already existing connection ...
If you're worried about exposing your internal setup you also need to filter packets with unusual IP flags such as "Record Route" [2] or "Internet Timestamp" [3]. Fortunately scrub should notice that.
[1] http://en.wikipedia.org/wiki/Path_MTU_Discovery
[2] http://tools.ietf.org/html/rfc791#page-18
[3] http://tools.ietf.org/html/rfc791#page-22
If you have a source NAT on your servers, it's likely that an attacker can easily detect that, no matter ICMP / TTL / IP options setting. Running p0f on established connections will show your setup, for example:
Other things that help as well is to not load balance the TCP/IP connection, but rather terminate on the first machine, then pass the connection through using something like varnish/haproxy.
There is an even more interesting technique - injecting packets with modified TTL into a currently running and valid TCP/IP connection. This often can be used to detect network setup behind NAT on the server side. I think the most famous attempt was 0trace by Michal Zalewski [2] but there are many implementations. Oh boy, one day I even created an Nmap script to do this [3], those were the days :)
[1] http://linux.die.net/man/8/traceroute
[2] http://seclists.org/fulldisclosure/2007/Jan/145
[3] http://seclists.org/nmap-dev/2007/q3/186