You can do this within the ggplot call by using stat_summaryh from the ggstance package. In the code below, I've also changed scale_colour_manual to scale_fill_manual on the assumption that you were trying to set the fill colors of the histogram bars:
library(tidyverse)
library(ggstance)
ggplot(mtcars, aes(x=wt))+
  geom_histogram(bins = 20,aes(fill = factor(cyl)))+
  stat_summaryh(fun.x=mean, geom="vline", aes(xintercept=..x.., y=0), 
                colour="grey40") +
  facet_grid(.~cyl)+
  scale_fill_manual(values = c('red','green','blue')) +
  theme_bw()

Another option is to calculate the desired means within geom_vline (this is an implementation of the summary approach that @Ben suggested). In the code below, the . is a "pronoun" that refers to the data frame (mtcars in this case) that was fed into ggplot:
ggplot(mtcars, aes(x=wt))+
  geom_histogram(bins = 20,aes(fill = factor(cyl)))+
  geom_vline(data = . %>% group_by(cyl) %>% summarise(wt=mean(wt)), 
             aes(xintercept=wt), colour="grey40") +
  facet_grid(.~cyl)+
  scale_fill_manual(values = c('red','green','blue')) +
  theme_bw()