The default configuration for ZigBee is as follows:
Coordinator's destination address is a broadcast (DH=0, DL=FFFF)
Router/End Device's destination address is a unicast to the coordinator. (DH=0, DL=0)
0 is a reserved address for the coordinator, FFFF is a reserved address for a broadcast. So if you want a router to talk to someone other than the coordinator, you just have to set the destination address accordingly.
The radio's address is the serial number. It's a 64-bit number broken into two halves (Serial High, and Serial Low). The easiest way to find this is to do a read and note the SH and SL. On the opposing router, put these two numbers in as your destination address (DH=SH, DL=SL). Alternatively, you could put in a broadcast address (DH=0, DL=FFFF) and everyone will hear your message.
The other option is to use API mode. This way you specify the destination address on a per-packet basis. This is a lot more complicated because you also have to format all of your data into a particular format. If you are using an Arduino, there's a library out there that will do all of the heavy lifting for you. You can have a mix of API and transparent (AT) radios on the network, which can make things easier...
Since you are concerned with the coordinator getting jumbled data from the routers, you could set the coordinator to be in API mode, and leave the routers in AT. The data you receive will be in a frame that will include the source address. So you can more easily parse who sent what.
Page 23 of this guide can describe it better than I can: http://ftp1.digi.com/support/documentation/90002168_A.pdf