¿Modificar objeto S3 sin devolverlo?

Soy nuevo en la programación orientada a objetos en R y lucho con cómo escribir correctamente una función que modifique un objeto.

Este ejemplo funciona:

store1 <- list(
  apples=3,
  pears=4,
  fruits=7
)
class(store1) <- "fruitstore"
print.fruitstore <- function(x) {
  paste(x$apples, "apples and", x$pears, "pears", sep=" ")
}
print(store1)
addApples <- function(x, i) {
x$apples <- x$apples + i
x$fruits <- x$apples + x$pears
return(x)
}
store1 <- addApples(store1, 5)
print(store1)

Pero supongo que debería haber una forma más limpia de hacerlo sin devolver todo el objeto:

addApples(store1, 5)  # Preferable line...
store1 <- addApples(store1, 5)  # ...instead of this line

¿Cuál es la forma correcta de escribir funciones de modificación en R? "<< -"?

Actualización: Gracias a todos por lo que se convirtió en Rosetta Stone para OOP en R. Muy informativo. El problema que estoy tratando de resolver es muy complejo en términos de flujo, por lo que la rigidez de las clases de referencia puede ayudar a la estructura. Desearía poder aceptar todas las respuestas como respuestas y no solo una.