Does this solve your problem?
dt[J(dates), on = 'date'][order(date), value := fcoalesce(value, shift(value))]
# date value
# <Date> <num>
# 1: 2000-01-01 1
# 2: 2000-02-01 2
# 3: 2000-03-01 2
# 4: 2000-04-01 NA