NAT will only pass packets to the internal network when it's expecting traffic from a specific machine or expecting packets for a specific service on a specific port. When traceroute sends out a packet, the packet is sent to the destined host, not the intermediary hosts which respond because of the lowered TTL (Time To Live). When NAT receives the packet from one of the intermediary hosts it becomes confused because no packet was ever sent directly to that intermediary host, therefore NAT has no information about routing to or from that host. Because NAT has no information on where to route the packet it will drop it before it reaches your machine. Since your machine never receives the packet with the traceroute information, traceroute ceases to function.