127.0.0.1 ist die sogenannte "Loopback-Adresse". Alle Netzwerkkarten sind so genormt, dass sie bei Angabe dieser IP "zu sich selber" zurückrouten, also daran kann es nicht liegen. Ich habe schließlich auch schon mehrere Sachen ausprobiert (u.A. Shoutcast-Winamp Streaming und da musste ich auch dem Winamp-Plug-In sagen, dass der Streamserver auf demselben Rechner läuft.
Also an den Networkbefehlen kanns nicht wirklich liegen, ad das alles hardwareintern läuft, und somit für das Programm an sich nicht weiter "andersartig" ist als ein Programm das wirklich nach Außen sendet.
Aber damit andere Leute connecten können, muss der Port geforwarded sein. Das geht i.d.R. mit dem Webinterface des Routers.
Warum das mit ICQ geht kann ich dir recht einfach erklären:
In dem Fall versucht nämlich der ICQ-Client den ICQ-Server zu kontaktieren. (Die Erklärung von NTQ war übrigends ziemlich gut mit den Viren

)
Der Router registriert das in seiner internen Tabelle, dass ICQ auf Port sowieso mit IP sowieso mit dem Server verbunden werden möchte und speichert das. Wenn der Server jetzt antwortet, guckt der Router vorher nach, wer geantwortet hat-
"AH, der ICQ- Server- der PC 192.168.1.4 wollte doch gerade was von dem... mh, OK, Port sowieso, da hatte der CLient auch drauf angefragt- ist genehmigt, gebe ich weiter.."
Kommt jetzt aber ein Hacker o.Ä., der versucht sich mit irgendeinem Port deines Rechners zu verbinden, ohne das ein Client die Anfrage gesendet hat, so weiß der Router nicht, an welchen PC im Netzwerk er das Paket schicken soll. (Aneinem Router sind ja meistens mehrere gleichzeitig) Also verwirft er das Paket- sogesehen ist das also garkein gewolltes Feature, sondern eine technische Unmöglichkeit (It's not a bug- it's a feature!).
Sagst du deinem Router jetzt im Webinterface, dass du port 987 forwarden willst, dann musst du einmal den Port einstellen, und die lokale IP, an den das Paket gesendet werden soll. Wenn jetzt ein Client von Außen versucht auf deinen PC zu connecten, so guckt der Router nicht mehr in seine Tabelle, sondern schickt es lediglich stumpf an die Angaben, die du hinterlegt hast.
Nachteil: Hast du 2 PCs am gleichen Router, und willst 2 mal den GLeichen Server starten, so musst du 2 verschiedene Ports für die jeweiligen PCs angeben, weil du kannst ja immer nur eine IP pro Port angeben, an die der Router seine Empfangsdaten senden soll- logisch, oder?
Ich hoffe ich habe fürs Erste zur einem kleinen "Ah"-Gefühl beigetragen, und damit eurer Logik auf die Sprünge geholfen
Was das Port-Forwarden per Automatik angeht: Das geht! Es gibt ein Protokoll, über das die Einstellungen von einem PC zum ROuter übertragen werden können. Das ist aber in den meisten Routern deaktiviert, da ja sonst auch Viren diesen Befehl einfach senden könnten, um den PC angreifbar von außen zu machen. Außerdem gab(gibt?!) es ist in diesem Dienst schon immer leichte Tricks um Sperrmechanismen zu umgehen- also ist dieser Ansatz eher unpraktikabel..
Gr33tz
Tafkadasomk5
Edit: Und jetzt fällt mir gerade der Name für das "Router-Einstell"- Protokoll ein: UPnP (Universal Plug'n'Play)
Azureus unterstützt das zum Beispiel um Torrent-Nutzern das Konfigurieren zu vereinfachen, da auch 2 Ports geforwarded werden müssen, um "full speed" erreichen zu können.