If you know the shift, couldn't you also just modify the peaks slot of your xcmsSet object?
xs <- xcmsSet(whatever)
# see first peak
print(xs@peaks[1,])
# subtract a constant shift (30 sec) from all rt values:
shift <- 30
xs@peaks[,c("rt", "rtmin", "rtmax")] <- xs@peaks[,c("rt", "rtmin", "rtmax")] - shift
# print the modified peak
print(xs@peaks[1,])
# then there's also the xs@rt which one could shift,
# but I don't know whether that's needed for the remaining workflow -
# I believe all further calculations start from xs@peaks.
xs@rt <- xs@rt - shift
What I don't know is, what will happen downstream if you want to extract chromatograms or whatnot.