First a criticism: sorry about this Stardock, but somebody had to point this out--saying that you are going to forego using a server/client model for the sake of reduced latency is like saying you are going to code the entire game in x86 assembly language for the sake of having the entire program run faster; it's something that people decided a long time ago that we, as developers, weren't going to do, because the efficency lost by using a compiler is made up for by the gain in sanity/the program actually working. My point is this: have you actually tested it and found that latency is so significant an issue with the server/client model that you have no other recourse?
Second, a statistic: After over fifty attempts, I managed to make it in to the lobbies of exactly 6 custom games; the router was a nonissue, as I bypassed it by connecting directly into the cable modem. I don't think blaming it on my ISP is particularly fair, as I would imagine you would be hardpressed to find any statistically significant sample of websites/other games that my ISP is the cause of my inability to visit/play (ie, the number of OTHER things I can't do on the internet because of my ISP is--statistically speaking--zero). Same goes for the Windows socket argument: I can't remember the last time that I went to a website, got an error, and was able to fix it immediately by refreshing. Granted, the web is TCP, but the point remains... My point is this: Even with the error-prone method of "everybody connects to everybody else," this statistic is unfathomably high; the fact that it is possible for Client A to connect to Client C and Client B to connect to Client C, but not for Client A to connect to Client B really suggests that there is something a little fishier going on.
Finally, a suggestion: Is there no way to hybridize your system to include a server/client model should no other recourse prove possible. That is to say, if Client A and Client B can both connect to Client C, but Client A cannot connect to Client B, then--in order to avoid "giving up" and declaring the game impossible--is it possible to implement it in such a way that Client A connects to Client B through Client C? My point is this: I implore you to at least consider an alternative; there is a /reason/ people use the server/client model.