Ich würde keine weiteren mod-rewrite-Rules definieren, sondern einfach alles in $_GET['p'] schreiben, so wie du es schon hast.
Die Parameter kannst du dann in PHP mit explode() passend zerlegen.
In meinem selbstgeschriebenen kleinen MVC-Framework werden URLs i.d.R. z.B. so aufgebaut:
http://www.meinedomain.de/controller/action/~/key1/value1/key2/value2 usw. mit beliebig vielen key-value-pairs.
Mod_Rewrite schreibt mir alles nach der Domain in $_GET['request'], in diesem Fall wäre das der kursiv geschriebene Part. Controller und Action können weggelassen werden, es gibt einen Default-Controller und eine Default-Action welche von jedem Controller implementiert werden muss. Alles nach /~/ sind die Parameter die an die aufgerufene Action übergeben werden.
In deinem Fall könntest du z.b. die URL so aufbauen: http://meinedomain.de/user/username
Im Code verarbeitest du das dann z.B. so (vom Prinzip her):
$requestArr = explode("/",$_GET['p']);
$view = array_shift($requestArr);
switch(strtolower($view)) {
case "user":
$name = array_shift($requestArr);
// User anzeigen
break;
// restliche cases + default
}