I'm thinking there may be an easier way than syncing the node clock to the gateway clock. As long as the node sends out a beacon signal at regular intervals (provided the interval is reasonably consistent from one to the next and drifts relatively slowly), then perhaps the gateway can simply keep track of the times it receives the beacon signals and from that compute when the node will be listening. To illustrate, suppose the node has completed 99 listen windows, and after the 100th time it sends a beacon signal to the gateway. Then, by the gateway knowing when it received the last two beacons, it seems like the gateway should be able to compute the start times of the next 100 listen windows.
Of course, just by itself that wouldn't guarantee the listen windows or the beacons of different nodes don't overlap, so in that sense it wouldn't be as good, but maybe there's a way to dance around that and prevent it from happening if the gateway notices that the beacons of different nodes have started to drift too close together.