I'm not a huge macro person, but if this were a "normal" programming language and I had an issue like that with latency creating problems, I'd insert a sleep() to make the program pause of a length of time sufficient for everything to "catch up". Does the macro language allow you to insert some kind of pause? So in C style pseudo code it'd look like:
Code:
cast(battlestance);
sleep(0.5); //pause the program for half a second to allow the network to catch up
cast(charge);
I'm not familiar enough with WoW's macro language to know if this would work though.
Edit to add: Looks like this is possible, but you have to invoke the lua script interpreter. Probably making things a lot more complicated than you want to for a "normal" macro.