Is there a technical name for a software project where the current and prior stable releases are both maintained?
The naming convention of such is usually determined by the source control system that you're using. SVN, for example, uses the terms branches and tags to refer to its codebases, with the latter referring to previously closed versions. My company refers to a branch of code for a previously released version as maintenance branch, although that may be individual of us.
The general terminology for releases (see Release Management Done Right) are:
So, 4.0 is the latest, while 3.0 and 3.1 are previous. Most software has a linear release pattern (this is significantly easier to maintain obviously): 3.0 first, then 3.1, then 4.0.
The non-linear pattern you describe (3.0 first, then 4.0, then 3.1) is called Previous Release Support. In this case, 4.0 remains the Latest release, even though 3.1 shipped after as a fix for 3.0 users.
Microsoft follows this pattern (Windows XP, a previous release is continually supported), whereas Apple (I believe), does not - you always have to upgrade to latest.