Abuse of data would also be an issue, there are a couple of ways of dealing with it; perhaps a light packet mode that would transmit data as fast as possible (maybe with some prediction services?) possibly with a set limit per frame or per client/peer? Possibly key value pairs - a big restraint but workable.
A chunkier non realtime version for non realtime events and maybe a full sync method (xml based? key/value collection? again maybe with a data limit?).
I could see something like;
LivePlayer livePlayer = LiveFramework.InviteFriend(); //goes to 360
LobbyMember lobbyMember = new LobbyMember();
lobbyMember.Name = livePlayer.GamerTag;
// then maybe get a connection via that player. The context would be Live versus System Link (and perhaps Local splitscreen).
if(livePlayer.Status != LiveStatus.Offline)
XnaConnection connection = livePlayer.GetConnection(livePlayer.NetworkContext);
Obviously this is oversimplified and adding in voice as well might be tickier (gameVoiceChannel.Add(liveplayer.Voice) would be a dream ).
Probably not good enough for halo but maybe for simple games and an easy entry point into what is normally a world of pain. But hey I'm just thinking out loud here