No worries. It is all in ggplot2::ggplot_build(), which:
takes the plot object, and performs all steps necessary to produce an object that can be rendered. This function outputs two pieces: a list of data frames (one for each layer), and a panel object, which contain all information about axis limits, breaks etc.
From there I am just accessing parts in the panels. Some of those are list objects, where you need to access the elements.