What you're asking for is Unified Change Management, and that's something that Subversion isn't really designed to do well (IMO). It's going to take some amount of manual effort to manage changes. But assuming you have decent issue-tracking systems in place, here's what many places I've worked have done:
main branch (trunk) - new feature development here
|- release-1.0 - locked release branch
|--- release-sp1
|--- release-patches - patch release fix stream (new fixes merged here)
|------ release-sp1-issue# - this is where you make your bug fixes
before merging them.
This issue# is the bug-id in your tracking system.
Once a bug is fixed and committed to the patch release, you delete the old -issue# branch. That keeps branches from getting out of control but lets you keep changesets small.
Maintainers can be enforced by making release trunks writable only to integrators. Using subversion via apache: Subversion/Apache Permissions, you could create a group, integrators, and set the following permissions on your project
project
|- branches (everyone: rw)
|- individual-fixes
|- release-branches: (integrator: rw, everyone: ro)
|- release-1.0-fixes
|- release-2.0-fixes
|- trunk (integrator: rw, everyone: ro) <- new dev goes here!!!!
|- tags (integrator: rw, everyone: ro)
|- release-1.0
|- release-1.0-sp1
|- release-2.0
Then each merge is small, well tracked, and only a small group of people can do merging. This creates a bottleneck on your merge team, however. I've never worked with a large git/mercurial team to see how this works.
You would implement something similar for feature fixes as well, but off your trunk instead.