Not sure what to say about signaling other than handling all the edge cases takes a non-trivial amount of effort and testing (which is true of most things in software).
Chat is only possible peer-to-peer if you don't care about histories. Since losing your history every time you reload a page or close a tab isn't a great experience, it's helpful to have a server in the middle keeping the history, unread counts, etc (which we do support today). Presence will always require a server.
We do run relay and STUN servers in locations around the world. Our STUN server is based on an open source implementation, but it is substantially customized. The relay server is our own.