I like parts of Russ Nelson's idea about fixing RSS. I think it would be far better to use UDP packets instead, that would save everyone a lot of time and effort. The key would be to send a subscription packet, which would then get a current item index... if this was newer than the last observed item, there could be a request for more items. (Or... the request could be built into the subscription packet if things are efficiently stored)
New items after that would just be UDP broadcasts of packets to the subscribed hosts. UnACKnowledged packets could be retried a few times, then written off the list of subscriptions.
This would work through NAT if the timeouts don't get in the way, just like they would with a TCP connection.