You could use core, but you don't need to.
First, yes, if you don't specify a mode to change to, then the routine just leaves the current mode unchanged. But most people would want an "I'm home" routine to change the mode to Home if the mode had previously been "away."
Easiest way to do that is to set up two separate routines.
One does everything you want your arriving home to do, except it doesn't change the mode. You can let it run in all modes.
Then have another one which is restricted to running only when the mode is away and have it change the mode to Home.
When you arrive home, if the previous mode is away, then both routines will run.
If the previous mode is anything else, only the first routine would run.
You might even want multiple versions of The first one, so that different things happen if you arrive home at different times of day.
But the main point is that a routine does not have to change the mode. And you can restrict what modes a routine runs in. And you can trigger multiple routines from the same event (you're arriving home) and control which ones actually run based on the current mode. Put that all together, and you should be able to set up what you want.