Quick solution using the functions venn.diagramfrom the package VennDiagram. Labels (counters) are hard-coded into functions, so they cannot be changed using function arguments. But for a simple example, you can change it grobsyourself.
library(VennDiagram)
foo <- c('a','b','c','d')
baa <- c('a','e','f','g')
v <- venn.diagram(list(foo=foo, baa=baa),
fill = c("orange", "blue"),
alpha = c(0.5, 0.5), cat.cex = 1.5, cex=1.5,
filename=NULL)
grid.newpage()
grid.draw(v)
lapply(v, names)
lapply(v, function(i) i$label)
v[[5]]$label <- paste(setdiff(foo, baa), collapse="\n")
v[[6]]$label <- paste(setdiff(baa, foo) , collapse="\n")
v[[7]]$label <- paste(intersect(foo, baa), collapse="\n")
grid.newpage()
grid.draw(v)
What produces

Obviously, this method will quickly get out of hand with a large number of categories and intersections.