In my experience, this can occur when it just happens to be that the data range (based on default expansion of 4%) and the "pretty" labels coincidentally create labels immediately on the edge of the plot. Having ggplot2 try special logic that works around this would be more logic than is strictly/usually necessary, and will increase the likelihood that it does not function predictably in all scenarios. (In my opinion, "simple and predictable" is often better and easier to work with.)
In addition to adjusting the margins (already suggested, and you said you are trying to not do that), another technique is to control either breaks= or labels=.
Changing breaks= requires you to determine a logical and "pretty" set of axis ticks, which can be itself a bit of a challenge in some scenarios; that is, if you know what your data range will be, then perhaps it will be easy, but to have a general method that works across number of ticks and ranges and such is a bit more work. base::pretty and scales::breaks_pretty() are good starts for how this can be done, and modifying them to prevent inclusion of 1.05 in this example can take a bit more work.
I recommend going with labels=, and changing any labels that are within "a little" of the expanded range can be replaced with strings. I naively use as.character(.x) for the default display, there are certainly better ways to handle this depending on your real data. I'll leave it to you to control the actual formatting.
# 0.04 is the default in scale-expansion, so we go a touch inside of
# that with 0.03 (subjective)
expanded_range <- scales::expand_range(range(data$x), mul = 0.03)
p <- ggplot(data, aes(x = x, y = y)) +
geom_point() +
scale_x_continuous(
labels = ~ ifelse(.x < expanded_range[1] | .x > expanded_range[2],
"", as.character(.x))
)

I'll admit to having done very little testing on this with real-world data; you may find a number other than 0.03 is better in your use.
grid::grid.arrangerather thanggplot2::facet_gridorggplot2::facet_wrap?p<-p+theme(plot.margin = unit(c(1,1,1,1), "cm")). Also, you are not loading packagegridExtrawheregrid.arrangecan be found, your code doesn't work as posted.ggplot2by itself doesn't do multi-page plots, butggforce::facet_wrap_paginate()(and*_grid_*) may do what you want.