Aggregating two queries and returning a COUNT of some permutations
You are probably over-thinking it.  What if you were to consider your "base" query as something along the lines of the following:

SELECT  CASE 
            WHEN TimestampOrdered &gt;= TIMESTAMP_TO_USEC( TIMESTAMP( "2014-07-01 05:00:00" ) ) 
             AND TimestampOrdered &lt; TIMESTAMP_TO_USEC( TIMESTAMP( "2014-10-01 05:00:00" ) )
              THEN Email
        END AS orderedbyQ3,
        CASE
            WHEN TimestampOrdered &gt;= TIMESTAMP_TO_USEC( TIMESTAMP( "2014-10-01 05:00:00" ) ) 
             AND TimestampOrdered &lt; TIMESTAMP_TO_USEC( TIMESTAMP( "2015-01-01 05:00:00" ) ) 
              THEN Email
        END AS orderedbyQ4
FROM    [reporting.order]
WHERE   timestampOrdered &gt;= TIMESTAMP_TO_USEC( TIMESTAMP( "2014-07-01 05:00:00" ) ) 
    AND timestampOrdered &lt; TIMESTAMP_TO_USEC( TIMESTAMP( "2015-01-01 05:00:00" ) ) 
    AND orderStatus IN ( 'Delivered', 'Collected', 'PaymentCaptured' )
    AND name NOT LIKE '%test%'
    AND restaurantId NOT LIKE '%test%'
GROUP BY email;


You could then rather easily get distinct email address counts and order counts, or whatever else you needed to derive:

SELECT  COUNT( DISTINCT OrderedByQ3 ) AS RestaurantsQ3,
        COUNT( OrderedByQ3 ) AS OrdersQ3,
        COUNT( DISTINCT OrderedByQ4 ) AS RestaurantsQ4,
        COUNT( OrderedByQ4 ) AS OrdersQ4
FROM (  SELECT  CASE 
                    WHEN TimestampOrdered &gt;= TIMESTAMP_TO_USEC( TIMESTAMP( "2014-07-01 05:00:00" ) ) 
                     AND TimestampOrdered &lt; TIMESTAMP_TO_USEC( TIMESTAMP( "2014-10-01 05:00:00" ) )
                      THEN Email
                END AS OrderedByQ3,
                CASE
                    WHEN TimestampOrdered &gt;= TIMESTAMP_TO_USEC( TIMESTAMP( "2014-10-01 05:00:00" ) ) 
                     AND TimestampOrdered &lt; TIMESTAMP_TO_USEC( TIMESTAMP( "2015-01-01 05:00:00" ) ) 
                      THEN Email
                END AS OrderedByQ4
        FROM    [reporting.order]
        WHERE   timestampOrdered &gt;= TIMESTAMP_TO_USEC( TIMESTAMP( "2014-07-01 05:00:00" ) ) 
            AND timestampOrdered &lt; TIMESTAMP_TO_USEC( TIMESTAMP( "2015-01-01 05:00:00" ) ) 
            AND orderStatus IN ( 'Delivered', 'Collected', 'PaymentCaptured' )
            AND name NOT LIKE '%test%'
            AND restaurantId NOT LIKE '%test%'
        GROUP BY email ) t;


Sorry if the syntax isn't perfect, I don't have access to a BigQuery DB.