standard eval with ggplot2 without `aes_string()`

A work-around is to substitute a common name for the variable name of interest in your function:

g1 <- function( variable ) {
  colnames(mtcars) <- gsub(variable, "variable", colnames(mtcars))
  ggplot(mtcars, aes(x=wt, y=variable, size=carb)) +
    geom_point() + ylab(variable)
}

variables <- c("mpg", "cyl", "disp")
variables %>% 
  lapply(g1)

You can do this using the !! operator on the variable after call to sym. This will unquote and evaluate variable in the surrounding environement.

library(rlang)
g1 <- function( variable ) {
  ggplot(mtcars, aes(x = wt, y = !! sym(variable) , size = "carb")) +
    geom_point()
}
g1("mpg")

variables <- c("mpg", "cyl", "disp")
variables %>% 
  lapply(g1)