Thank you for your reply oosyrag! That makes more sense for sure. I've found there isn't much information on these topics but it's pretty interesting.
I'd briefly thought of being able to send some sort of message containing the animation information, however it's my lack of knowledge of the program or multiplayer in general that stopped me from doing that first so thank you for explaining it to me.
Fortunately, I've somehow gotten it to work with what I guess you can call a semi-local fix to the problem.
Okay here it is, I'll try to explain best I can. First, I ditched the PlayerAnimation sprite and simplified everything by just adding the animations onto the Peer sprite. Now there's only one sprite to deal with.
Next, I again used a for each loop to go through each Peer. Using a global variable PEER_FOREACH that goes up by 1 each loop and resets to 0 when it reaches the number of Peers, I was able to pick every Peer instance individually. This was done by using a condition 'Pick Peer where Peer.IID = PEER_FOREACH'. Since all the characters look the same and have the same animations, I used their IIDs to distinguish them in the moment, because in this case it doesn't matter if the IID changes. What it does do is ensures that if there are 3 players for example, there will always be IIDs of 0, 1, and 2, so the for loop should work no matter what.
Then, in its subevent, instead of testing for movement like I did before, I used the system getbit(Peer.inputs,(0, 1, 2, or 3)) = 1 to get the inputs from players, as it seemed like testing for direction wasn't working on all of them (wasn't consistent). This left me with animations working across screens, but only for Peers. Every single player that wasn't the host's specific player (Peer instance) had a working animation.
So after that, the reasoning I came to is that since the host's inputs were being run locally, the other versions of the game were not able to detect its inputs. Idk if this makes sense, but on top of controlling its inputs directly, I added 'set inputs to setbit(Self.inputs, (0 to 3), (0 to 1))' for each of its inputs so that they wouldn't just be local and would then work with my for each loop.
Not gonna lie I was actually surprised when this worked right away so there's probably something wrong with performance or something now haha.
Anyways, just happy to get it working, and maybe I did it totally wrong but hopefully this is also useful to someone somehow.
If it doesn't hold up as I continue to work on the game, I'll be using the method you suggest oosyrag, so thank you again.