How to know when to use seperate meshes
Do the same thing as real world factory/builder creating the object, if doing this help you to keep clean topologies 

Saying that you have to add a button on a plane panel, and you don't care about the gap that between the button and panel. Then you should consider direct add a new separated button mesh. 



Since as moonboots said, if the thing is created that way in real world, it should modeling in that way. The crafting pipeline in real world factory already test the SOP. Unless you have a good reason, just create a new mesh.

You can also create a Suzanne monkey in your Blender, and see the mesh of it. The eyes are actually separated from the face.

There are some exceptions, like when you are creating game asset. The number of vertices inside the object matters the performance. And by merging the button vertices and the panel vertices will give a less vertices object. Then you should consider merging those geometry for game.



Also, when you are modeling living creatures, and you need to control them by non-rigid deformation(bent). You should probably use an intact mesh for a good behavior in deformation algorithm.