array modifier and parenting
The key concept here is linked data.

When you create geometry with the array modifier, all of the instances behave as a single object, they share the a common origin (or pivot point) and any changes made to the geometry of the original will be replicated in all of the instances.

If you apply the modifier you are creating a single object, comprised of copies of the original mesh, but the geometry of the independent meshes it contains is no longer shared. In other words: an object can have different disconnected meshes, and all of them will have a single origin (pivot point), but If you edit any of the meshes in edit mode, all others will remain unaffected as they do not share any data. 



Likewise, if you Duplicate an object in object mode, or by adding, you create a completely separate object, that shares no mesh data with the original object. If you parent the objects they will behave as one in the sense that you can rotate, scale and move the parent, and all of the children will follow accordingly, but if you edit the mesh all of the meshes will be unaffected as they do not share the same mesh data.



If instead of a duplicate (&#8679; Shift+D) you create a linked duplicate(&#9095; Alt+D) you will create two objects that are independent, in the sense that they have different origins and can be rotated, scaled and moved independently, but they share the same data. Editing the mesh of one will change all of the copies that share the same linked data. 



Look what happens in the outliner as the linked copies are being created, even though they are different objects (suzanne, suzanne.001 and suzanne.002) the mesh data is the same (suzanne as the original one)

Lastly, those independent objects that use the linked data can then be parented, so that they can be rotated, scaled and moved following the corresponding transformation on the parent object.