I had this same issue. I solved it with a couple of special virtual switches that I use to establish “presence” of other people in the house. For example, I have one called “Houseguest” – which I (privately) turn on whenever I have a guest in the house, and off again when they leave town.
Then, I wrote a pretty simple arrival-departure handling app which checks the state of those “presence” vswitches whenever we depart. If none of them are on (meaning the house really is empty), it puts the house in “Away” mode, and arms the alarm… but if one or more of them are on, it puts the house into a different mode called “Occupied”.
The “Occupied” mode basically means someone’s is still here, but it’s neither me nor my wife, so:
(a) don’t arm the alarm (“Occupied” is a “disarm” mode in SmartAlarm), and
(b) they probably don’t want all kinds of crazy automation stuff going on in our absence, so most of that stuff is inactive when the house is in “Occupied” mode
When we return, it returns the house from either Away or Occupied back to Home mode.
For those times when I don’t want the house to be disarmed for extended stretches… I have a SmartApp for the Schlage door lock that does a good job turning these presence switches on, depending on whose code unlocks the door.
Departures have been a little trickier though. Along the lines of what geko suggested, I am thinking about using a MiniMote or some other method to let the person let the house know when they have left the house (for real).
So far my “visitors” have mainly been carpenters, so I have been just turning their presence vswitches off according to a fixed schedule, since I know they take off before 6pm. Either way – behind the scenes, this is just a matter of turning off the appropriate virtual “presence” switch.