Have you looked at the structure of the ggplot2-generated object from the generated data? There's definitely more information than you'd want in there (e.g. the elements that are just function, etc), but the specific geoms are included, as well as the source data:
suppressPackageStartupMessages(library(tidyverse))
mpg <- mpg %>%
filter(cyl == 4 | cyl == 8)
p <- ggplot(mpg, aes(displ, cty)) +
geom_point() +
facet_grid(cols = vars(cyl))
p[["layers"]][[1]][["geom"]]
#> <ggproto object: Class GeomPoint, Geom, gg>
#> aesthetics: function
#> default_aes: uneval
#> draw_group: function
#> draw_key: function
#> draw_layer: function
#> draw_panel: function
#> extra_params: na.rm
#> handle_na: function
#> non_missing_aes: size shape colour
#> optional_aes:
#> parameters: function
#> required_aes: x y
#> setup_data: function
#> use_defaults: function
#> super: <ggproto object: Class Geom, gg>
str(p)
#> List of 9
#> $ data :Classes 'tbl_df', 'tbl' and 'data.frame': 151 obs. of 11 variables:
#> ..$ manufacturer: chr [1:151] "audi" "audi" "audi" "audi" ...
#> ..$ model : chr [1:151] "a4" "a4" "a4" "a4" ...
#> ..$ displ : num [1:151] 1.8 1.8 2 2 1.8 1.8 2 2 4.2 5.3 ...
#> ..$ year : int [1:151] 1999 1999 2008 2008 1999 1999 2008 2008 2008 2008 ...
#> ..$ cyl : int [1:151] 4 4 4 4 4 4 4 4 8 8 ...
#> ..$ trans : chr [1:151] "auto(l5)" "manual(m5)" "manual(m6)" "auto(av)" ...
#> ..$ drv : chr [1:151] "f" "f" "f" "f" ...
#> ..$ cty : int [1:151] 18 21 20 21 18 16 20 19 16 14 ...
#> ..$ hwy : int [1:151] 29 29 31 30 26 25 28 27 23 20 ...
#> ..$ fl : chr [1:151] "p" "p" "p" "p" ...
#> ..$ class : chr [1:151] "compact" "compact" "compact" "compact" ...
#> $ layers :List of 1
#> ..$ :Classes 'LayerInstance', 'Layer', 'ggproto', 'gg' <ggproto object: Class LayerInstance, Layer, gg>
#> aes_params: list
#> compute_aesthetics: function
#> compute_geom_1: function
#> compute_geom_2: function
#> compute_position: function
#> compute_statistic: function
#> data: waiver
#> draw_geom: function
#> finish_statistics: function
#> geom: <ggproto object: Class GeomPoint, Geom, gg>
#> aesthetics: function
#> default_aes: uneval
#> draw_group: function
#> draw_key: function
#> draw_layer: function
#> draw_panel: function
#> extra_params: na.rm
#> handle_na: function
#> non_missing_aes: size shape colour
#> optional_aes:
#> parameters: function
#> required_aes: x y
#> setup_data: function
#> use_defaults: function
#> super: <ggproto object: Class Geom, gg>
#> geom_params: list
#> inherit.aes: TRUE
#> layer_data: function
#> map_statistic: function
#> mapping: NULL
#> position: <ggproto object: Class PositionIdentity, Position, gg>
#> compute_layer: function
#> compute_panel: function
#> required_aes:
#> setup_data: function
#> setup_params: function
#> super: <ggproto object: Class Position, gg>
#> print: function
#> show.legend: NA
#> stat: <ggproto object: Class StatIdentity, Stat, gg>
#> aesthetics: function
#> compute_group: function
#> compute_layer: function
#> compute_panel: function
#> default_aes: uneval
#> extra_params: na.rm
#> finish_layer: function
#> non_missing_aes:
#> parameters: function
#> required_aes:
#> retransform: TRUE
#> setup_data: function
#> setup_params: function
#> super: <ggproto object: Class Stat, gg>
#> stat_params: list
#> super: <ggproto object: Class Layer, gg>
#> $ scales :Classes 'ScalesList', 'ggproto', 'gg' <ggproto object: Class ScalesList, gg>
#> add: function
#> clone: function
#> find: function
#> get_scales: function
#> has_scale: function
#> input: function
#> n: function
#> non_position_scales: function
#> scales: list
#> super: <ggproto object: Class ScalesList, gg>
#> $ mapping :List of 2
#> ..$ x: language ~displ
#> .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
#> ..$ y: language ~cty
#> .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
#> ..- attr(*, "class")= chr "uneval"
#> $ theme : list()
#> $ coordinates:Classes 'CoordCartesian', 'Coord', 'ggproto', 'gg' <ggproto object: Class CoordCartesian, Coord, gg>
#> aspect: function
#> clip: on
#> default: TRUE
#> distance: function
#> expand: TRUE
#> is_free: function
#> is_linear: function
#> labels: function
#> limits: list
#> modify_scales: function
#> range: function
#> render_axis_h: function
#> render_axis_v: function
#> render_bg: function
#> render_fg: function
#> setup_data: function
#> setup_layout: function
#> setup_panel_params: function
#> setup_params: function
#> transform: function
#> super: <ggproto object: Class CoordCartesian, Coord, gg>
#> $ facet :Classes 'FacetGrid', 'Facet', 'ggproto', 'gg' <ggproto object: Class FacetGrid, Facet, gg>
#> compute_layout: function
#> draw_back: function
#> draw_front: function
#> draw_labels: function
#> draw_panels: function
#> finish_data: function
#> init_scales: function
#> map_data: function
#> params: list
#> setup_data: function
#> setup_params: function
#> shrink: TRUE
#> train_scales: function
#> vars: function
#> super: <ggproto object: Class FacetGrid, Facet, gg>
#> $ plot_env :<environment: R_GlobalEnv>
#> $ labels :List of 2
#> ..$ x: chr "displ"
#> ..$ y: chr "cty"
#> - attr(*, "class")= chr [1:2] "gg" "ggplot"
Created on 2018-09-05 by the reprex package (v0.2.0.9000).