I'm afraid there is no way to accept incoming requests from the internet without first making an exception in the firewall. Doing otherwise would be a huge security hole as anyone could then write an app that allowed malicious code to do this exact thing. Hence you cannot accept incoming network requests without a firewall exception. No workaround to this that would be in any way secure.
You can initiate outgoing requests potentially without a firewall rule change but on most computers outgoing requests are also blocked by default. This is, again, for security reasons. The only program that wouldn't want you to do this is malicious software. Most apps simply add a rule when they install themselves so this shouldn't be an issue for a user.
As for communicating across the Internet there are many different RPC options available. If you don't want to have to configure custom port stuff then HTTPS probably is the easiest but this requires you running a web server. For simple communications using a custom protocol then a regular TCP client/server app is sufficient. If you are building a "chat" like app then UDP is probably better but at the cost of reliability. There are plenty of examples online on how to build these types of apps in C#. Unfortunately they all require that you write a reasonable amount of code and you must understand how TCP/UDP works.