No, you are correct. Animation data is stored on a per object basis in blender, so each cube has it’s own animation data. Today, at least you can view all animation key frames in the dope sheet editor, so if you wanted to move key frames around for more than one object, you can do it from a single editor. Before blender’s 2.5 re-write, you couldn’t view key frames for more than one object at a time, what a PITA that was…
Having said that, the work around for you is to use an armature to control the cubes, a simple bone for each cube. Since animation data is stored on a per object basis, the armature object will have the action for the 2 bones that control the cubes. 1 action for 2 cubes. For the materials, textures, or anything else, these can be controlled by bones as well, but it gets a bit tricky. Bones, and a lot of other stuff in blender, can have ‘custom properties’ added to them. Custom properties are numeric values that are stored with the bone, or what ever you create them on. Add a custom property to a bone, and it’s animation data is stored in the same action as the bones. Then you add a driver to whatever you want to control, and use the custom property as the data source for the driver.
The tricky part of this is how you set up the drivers, takes time to learn… or watch this: