WebRTC defines STUN (Session Traversal Utilities for NAT) and TURN (Traversal Using Relay NAT) for dealing with firewalls. The problem is that they're optional and not always implemented. Secondly TURN relays data using a central server so can add latency or hit bandwidth bottlenecks.
Somewhat, but in practice, WebRTC punts half of the problem to the site's own code. That's why some sites using WebRTC work great almost everywhere, and others seem to work great as long as you're not on any kind of unusual connection/firewall/proxy.
WebRTC behaves properly until you support multiple browsers. Then it becomes a nightmare to maintain.