It would depend on whether and how stages are used elsewhere in the manifest set. With stages it's often "in for a penny, in for a pound." Generally speaking, though, it should be possible to do this sort of thing (or anything, actually) without stages.
Does this work?
class myorg::common (
$staging = 'setup',
) { ...
Nan
Provided that all of the relevant Apt sources are managed via Apt:::Source resources, and that no virtual Apt::Source or Package resources are declared without elsewhere being realized, this declaration should work:
Apt::Source<| |> -> Exec['apt_update'] -> Package<| |>
That declaration is not itself affected by or dependent on stages, but it is possible for the referenced resources to be assigned to stages in such a way that the chain closes one or more dependency cycles. Such cycles would reflect an error in the stage assignments, however, for the chain expression succinctly and precisely describes the requested resource application order; as long as it does so, it defines the correct orders. It would be sufficient to make that declaration once, in some central place, but not harmful to make it multiple times.
There are all manner of tweaks and accommodations that could be applied to handle special cases, such as when there are virtual Apt::Source or Package resources must remain unrealized, but the chain above captures the essential essence of the required declaration.
John