I haven't actually noticed it before, to be honest
I agree with your analysis, though - the macro seems to be intended for storing the frame counter, but I suspect it is used for internal debugging purposes or something, since it is not exposed as a proper API currently. Storing the counter in TX_COMPLETE seems sensible to me, though that's not currently implemented in the library or examples.
AFAIU the spec, it should reset the counters, since that's pretty much the only way to handle rollover currently. Note that it should not just reset the counters, but also allocate a new key (which is why resetting the counters does not hurt security). For personalized devices, I guess the same could happen by re-registering a device in the TTN backend, but then the burden of actually changing the key is on whoever does the registration.