How to assign a random colour/texture to each mesh "element"

If the tiles were mesh instances, you could use the ‘per instance random’ node in the material to drive some random artifacts. As it’s all one mesh, you can just put a noise texture in the material and use that to distribute dirt over the roof.

Some good examples are in the materials in the starter content.