Am I sufficiently cleaning incoming $_GET parameters, especially in the array?
My 2 cents:

$int = abs( intval( $int ) ); // positive number

Silently fixing input values is evil, perhaps required, but still evil.

function gfahp_sanitize_array( $array ) {
     $array = array_walk_recursive( $array, "gfahp_sanitize_string" );
     return $array;
}


You assign and then return, I would just return immediately

function gfahp_sanitize_array( $array ) 
{
     return array_walk_recursive( $array, "gfahp_sanitize_string" );
}


Also, what is up with gfahp ? Hungarian notation of functions with acronyms is a slappable offence.

As for

function val4_strip($val_4){
// strip down val4
    if (!empty($val4){
        switch ($val4) {
            case 'foo':
                $val4 = 'foo';
            break;
            case 'bar':
                $val4 = 'bar';
            break;
            case 'fudge':
                $val4 = 'fudge';
            break;      
            default:
            $val4 = (unset) $val4
            break;
        }
    }

}


You should probably go for a generic function that can look up a value in a set and assign it if found, otherwise return blank. ( Also that function does not return anything? ) (Also you are unsetting var4 in places ). Something like

$val4_set = array( "foo" , "bar" , "fudge" );

( isset( $_GET["val4"] ) ? (string) $val4 = sanitize_string_from_set($_GET["val4"], $val4_set)  : (unset) $val4 );

function sanitize_string_from_set( $string , $set )
{
  return array_key_exists( $string, $set )?$string:""; 
}