Hopefully this isn't an over-simplification of your actual problem, but by the looks of it, cbind
might be an option for you to consider:
out <- cbind(dat1,
setNames(data.frame(t(replicate(nrow(dat1), dat2$value))),
dat2$NE_id))
out[, order(names(out))]
# NE001 NE001.1 NE002 NE002.1 NE003 NE003.1
# 1 -1.2 2 3.0 -0.4 2.0 3
# 2 2.0 2 -1.2 -0.4 3.0 3
# 3 3.0 2 2.0 -0.4 -1.5 3