Can I change default registration link (without htaccess)?

If you want to keep this information in the $_GET, you will have to modify the form’s action parameter URL. You can do this by hooking into site_url:

add_filter( 'site_url', 'wpse18418_site_url', 10, 4 );
function wpse18418_site_url( $url, $path, $scheme, $blog_id )
{
    if ( 'login_post' == $scheme ) {
        $url .= '&role=doctor'; // Or do this dynamically
    }
    return $url;
}

But instead of always looking in the $_GET, it might be a solution to save the role field in a hidden field and check $_REQUEST instead – it will contain both $_GET and $_POST.