Share parts of mesh data across meshes
To take a somewhat @Gorgious-flavoured approach ;)..
You could use the same mesh for the head and tail caps, and the arrayed mid-section, but with different areas removed using a Mask modifier.
Assigning groups in face mode ensures the shared vertices are selected in each group:

Then 'Head', 'Mid', and 'Tail' objects can be AltD instanced, and each given a Mask  modifier, aimed at their respective groups. 'Mid' is the arrayed element...

The offset of the caps is unlikely to marry the midsection. As shown above, that can be fixed by giving them  a Displace modifier, along the array-axis.
Then you can edit the original, unmasked, instance, ('All', below,) and the array elements and caps will follow.