My (hackish) way to do it would be:
is.consecutive = duplicated(rbind(dt,transform(dt, year=year+1),
transform(dt, year=year-1)),
fromLast=TRUE)[1:nrow(dt)]
is.consecutive
contains a vector of booleans of the observations to be retained. For your example, this vector would be: TRUE TRUE TRUE FALSE FALSE TRUE TRUE FALSE
Finally, you can easily use this vector to subset your data.frame, e.g. with:
dt[is.consecutive,]