I am (or maybe was, after learning about jeenode, I may abandon my radio project) implementing the following logic:
for sensors that tolerate occasional loss of data:
Every N seconds, send data only if there is new data (the most recent sensor reading is not equal to the last transmission), or if the previous reading wasn't acknowledged. No automatic retransmission is used when ack isn't received, that is covered at the next transmission in N seconds. The goal is to transmit as little as possible in order to minimize radio bandwidth and maximize sensor battery life.
for sensors that don't tolerate data loss or delay:
Transmit as soon as the data changes. Use ACK and retransmission to make sure the data gets through.
Note that you should use some sort of pseudo-random, exponentially increasing, backoff delay between re-transmissions so you don't have two nodes banging away at each other in sync. But, unlike TCP, return to the minimum backoff delay for each new transmission. I haven't gone through your code yet, maybe you have that already. It is basic CSMA/CA.
My thought is that on retransmission, I would always send the latest data reading. Once the backoff delay becomes the maximum N seconds, it works like the algorithm that tolerates data loss. Thus, the two transmit routines are the same. Just set the minimum retransmit time to 1 or equal to the maximum retransmit time during setup.