But that is the standard way to route urls, by using build and parse. Moreover the API is there in 3.1[and I believe earlier] for SEF plugins to use.
Example:
$vars = array();
// Process the parsed variables based on custom defined rules
$vars = $this->_processParseRules($uri);
// Parse RAW URL
if ($this->_mode == JROUTER_MODE_RAW)
{
$vars += $this->_parseRawRoute($uri);
}
// Parse SEF URL
if ($this->_mode == JROUTER_MODE_SEF)
{
$vars += $this->_parseSefRoute($uri);
}
return array_merge($this->getVars(), $vars);
Notice that the FIRST function call there in parse is to _processParseRules AND that Joomla will only call it's internal parsing functions if the router mode is set to either JROUTER_MODE_RAW ot JROUTER_MODE_SEF
JRouter has publicly accesible methods for attachBuildRule and attachParseRule
An SEF plugin running early in the system process can:
1) Get the router
2) Change the mode ie:
define JROUTER_MODE_SH404;
JRouter::getInstance()->setMode(JROUTER_MODE_SH404);
3) Register it's own parse and build callback functions in the router
That's it. Done. A new SEF system has now completely hijacked the routing system - and if it plays nice by adding a check for "if (JRouter::getInstance()->getMode() == JROUTER_MODE_SH404)" before it goes and does a parse or a build, then in the case of multiple SEF plugins being enabled you won't get complete destruction, but instead you will get a "last one wins" philosophy.
In short, the interface is already there, the API is already there. It's up to SEF component writers to use it IF it is of value to them.