Finally, different types of ROMs are required by different machines, with respect to where the kernel is to look for ROMTags, how much stack space it may use, etc. If I remember correctly, the big difference here is between the machines built around the architecture of the A3000 (which includes the A4000 and A1200 models) and those which precede it (this being the A2000 and the A500; I think the A600 belongs here, too).
No, you can run an A500 with an A1200 kickstart. I was using Kickstart 3.0 on an A500 before 3.1 came out. There are a ton of bugs with OCS/ECS, but that was just because they didn't prioritise fixing them.
The main difference is A500/A2000/A600 uses a single 16 bit rom and later machines use two 16 bit roms to provide 32 bits. Which provides a physical reason for the difference, although the actual contents could have been the same across them all.
For Kickstart 3.1 there were different versions for different hardware because there wasn't enough time to fix all the bugs (they'd fix one and it would break something else) and also due to rom size (A4000T needing both scsi & ide for example). They could have pushed workbench.library onto disk for everybody and included all the devices with auto detection, but there wasn't a business case for it.
There was also the A4000/A1200/A600 ide being different, but again that could have been handled by detecting whether you had gayle or not and handling different code paths.