Yes. You want CFL-reachability.
You put a left-parenthesis on each call edge and a right-parenthesis on each return edge (with a different kind of parenthesis for each function). Then, you look for a path where the sequence of symbols along the edges in the path form matched parentheses.
This is basically the intersection of a context-free language (CFL) with a graph reachability problem (finite state automaton), and as you know, the intersection of a CFL and a regular language is itself a CFL. As a result, there are efficient algorithms for CFL-reachability.
There's also lots of theory and work on algorithms to make this as efficient as possible. You can even find existing tools for this sort of thing.
I'd suggest you start by looking at the following papers:
Thomas Reps. Program Analysis via Graph Reachability. Information and Software Technology, vol 40 no 11-12, Nov/Dec 1998, pp.701--726.
Thomas Reps, Susan Horwitz, Mooly Sagiv. Precise interprocedural dataflow analysis via graph reachability. POPL '95.
Thomas Reps, Stefan Schwoon, Somesh Jha, David Melski. Weighted Pushdown Systems and their Application to Interprocedural Dataflow Analysis. Science of Computing Programming, vol 58 no 1-2, Oct 2005, pp.206--263.
The first two consider only the reachability problem (is there a path from $s$ to $t$?). The third can be used for the shortest paths from (find the shortest path from $s$ to $t$).