Okay I've been able to do it via svg(), though I am open to other suggestions.
ggpdf = function(filename, plot, height, width, keep_svg = FALSE, ...){
filename = gsub(filename,
pattern = "\\.svg|\\.pdf",
replacement = "")
svgname = paste0(filename, ".svg")
pdfname = paste0(filename, ".pdf")
svg(filename = svgname, width = width, height = height, ...)
plot(plot)
dev.off()
rsvg::rsvg_pdf(svg = svgname, file = pdfname)
if(!keep_svg){unlink(svgname)}
}