How to align polyhedra face to face in an array
Well, I found the solution. Although the result does not look like the object on the very first picture, the array elements lined up face to face, which is what I wanted.
The problem is that some non-rectangular polyhedra have no faces being normal to their coordinate axes. Since the array modification relies on the &quot;local&quot; coordinate system of the whole object, you can't produce an array with objects aligned face to face unless you change the object's local axes.
The solution is basically given in the comment above, with a tweak to achieve perfect alignment of the faces. So, once more:

Create an icosahedron and a cube.
Using a plugin (&quot;align by faces&quot;, from here), align the face of a cube with one of the object's faces.
Delete all of the cube's vertices.
Join the icosahedron TO the cube (not the other way round) so that the resulting object inherits the cube's axes.
Origin to geometry and create an array.
Create an empty in the center of the icosahedron. At this point you can set the empty as the offset object to check how things are looking.
Rotate the empty so that the &quot;normal&quot; axis (along which the array should be situated), in my case the x-axis, aligns with the icosahedron's axis. I just copied the angle numbers from one to the other.
The result is this:


And of course this can be further tweaked by moving/rotating the empty and changing offsets.