Here we use some unreadable base R. If using dplyr pipes to make the code readable, might as well use group/summarise
data.frame(id = unique(exdf$id),
           dv = cbind(lapply(split(exdf, exdf$id),
                             function(x) unlist(x$dv))))
   id                                                      dv
1   1                   3, 5, 6, 4, 7, 4, 2, 1, 6, 5, 5, 8, 5
2   2    2, 8, 8, 6, 6, 1, 1, 7, 7, 4, 4, 7, 5, 5, 2, 3, 6, 4
3   3                            2, 6, 5, 6, 3, 3, 8, 6, 6, 1
4   4                7, 4, 6, 8, 3, 4, 2, 4, 5, 5, 3, 4, 5, 2
5   5    4, 7, 8, 2, 6, 2, 6, 3, 5, 8, 6, 3, 4, 2, 1, 3, 2, 3
6   6                      4, 1, 7, 1, 8, 6, 4, 7, 8, 4, 1, 3
7   7                      7, 3, 4, 7, 3, 3, 4, 3, 6, 7, 7, 4
8   8                4, 2, 7, 6, 8, 7, 4, 8, 4, 4, 2, 8, 6, 6
9   9 1, 6, 4, 7, 6, 8, 4, 6, 4, 3, 4, 5, 2, 2, 5, 8, 3, 2, 8
10 10    5, 5, 7, 1, 4, 2, 6, 1, 2, 2, 1, 1, 6, 8, 8, 2, 7, 6
And if we are dead set on using 'aggregate', you can do the following by changing the list of numeric into character. Then use regex to extract those numbers.
exdf$dv <- as.character(exdf$dv)
aggregate(
  formula=dv~id,
  data=exdf,
  FUN = function(x) regmatches(paste0(x, collapse = ""),
                               gregexpr('[0-9]', paste0(x, collapse = ""))))
   id                                                      dv
1   1                   3, 5, 6, 4, 7, 4, 2, 1, 6, 5, 5, 8, 5
2   2    2, 8, 8, 6, 6, 1, 1, 7, 7, 4, 4, 7, 5, 5, 2, 3, 6, 4
3   3                            2, 6, 5, 6, 3, 3, 8, 6, 6, 1
4   4                7, 4, 6, 8, 3, 4, 2, 4, 5, 5, 3, 4, 5, 2
5   5    4, 7, 8, 2, 6, 2, 6, 3, 5, 8, 6, 3, 4, 2, 1, 3, 2, 3
6   6                      4, 1, 7, 1, 8, 6, 4, 7, 8, 4, 1, 3
7   7                      7, 3, 4, 7, 3, 3, 4, 3, 6, 7, 7, 4
8   8                4, 2, 7, 6, 8, 7, 4, 8, 4, 4, 2, 8, 6, 6
9   9 1, 6, 4, 7, 6, 8, 4, 6, 4, 3, 4, 5, 2, 2, 5, 8, 3, 2, 8
10 10    5, 5, 7, 1, 4, 2, 6, 1, 2, 2, 1, 1, 6, 8, 8, 2, 7, 6