Thanks to Arun for providing the answer in an elegant one line solution.
r[, c(paste("cv.lag", 1:10, sep="")) := lapply(1:10, function(i) c(rep(NA, i), head(cv, -i))), by=list(station,landcover)]
station landcover cv cv.lag1 cv.lag2 cv.lag3 cv.lag4 cv.lag5 cv.lag6 cv.lag7 cv.lag8 cv.lag9 cv.lag10
1: A Mixed Forest 0.2732874 NA NA NA NA NA NA NA NA NA NA
2: A Mixed Forest 0.4533462 0.2732874 NA NA NA NA NA NA NA NA NA
3: A Mixed Forest 0.2350885 0.4533462 0.2732874 NA NA NA NA NA NA NA NA
4: A Sand 0.7031129 NA NA NA NA NA NA NA NA NA NA
5: A Sand 0.2219072 0.7031129 NA NA NA NA NA NA NA NA NA
6: A Sand 0.2784597 0.2219072 0.7031129 NA NA NA NA NA NA NA NA
7: B foam 0.3766463 NA NA NA NA NA NA NA NA NA NA
8: B foam 0.6629700 0.3766463 NA NA NA NA NA NA NA NA NA
9: B foam 0.2964587 0.6629700 0.3766463 NA NA NA NA NA NA NA NA
10: B other2 0.3903353 NA NA NA NA NA NA NA NA NA NA
11: B other2 0.7124762 0.3903353 NA NA NA NA NA NA NA NA NA
12: B other2 0.5356125 0.7124762 0.3903353 NA NA NA NA NA NA NA NA