Those are two independent uses of prototype. Prototype OO is a special type of object oriented programming that is unrelated to the use of prototypes in vctrs.
This is not an choice that vctrs made, but a choice that R itself made because is valid base R code:
df <- data.frame(x = 1:3)
df$y <- matrix(runif(6), nrow = 3)
And subsetting that data frame works, which does not happen without effort, suggesting that this is a deliberate design choice for data frames.
If f() is size-stable, it posses the useful property that df$z <- f(df$x) will work. That's not true for vapply():
df$z <- vapply(df$x, rep, 2, FUN.VALUE = integer(2))
# Error in `$<-.data.frame`(`*tmp*`, z, value = c(1L, 1L, 2L, 2L, 3L, 3L :
# replacement has 2 rows, data has 3
vapply() is very close to being size-stable (as well as type-stable), but the output is transposed compared to what the principle of size-stability suggests.
Yes, of course. See https://github.com/r-lib/vctrs/issues/170 and I'll also look into this in roxygen2. But I don't think the boilerplate is that big of a cost because you only need to create it once, so it's not super high on my priority list.
The goal of the tidyverse is to be simpler for users. If you want to contribute deeply to the tidyverse, you are going to have to learn a bunch of programming concepts and up your software engineering game. Unfortunately, it is by necessity hard to contribute to a system that's used by millions of people. We are trying to make it as easy as possible (by improving tooling, writing books, and running developer days), but it's never going to be as easy as using R for data analysis.