Mysql left joins last row
Can you use temp tables?  I think that's generally the best idea... using a lot of subqueries can get nasty real quick.  Here's my version:

(I'm not able to test it so use it at your own risk.  Also if you use temp tables, you'll still probably want to define your datatypes in the CREATE TABLE sections)

DROP TABLE IF EXISTS temp_date_unjoin;

CREATE TABLE temp_date_unjoin
SELECT
    user_id,
    MAX(created_at) AS date_unjoin
FROM wants_email_logs
WHERE value = 0
GROUP BY user_id;

DROP TABLE IF EXISTS temp_date_last_order;

CREATE TABLE temp_date_last_order
SELECT
    user_id,
    MAX(created_at) AS date_last_order
FROM orders o
WHERE state IN ('paid', 'processing', 'shipped', 'completed')
GROUP BY user_id;

DROP TABLE IF EXISTS temp_cheque_date;

CREATE TABLE temp_cheque_date
SELECT
    user_id,
    MAX(created_at) AS cheque_date
FROM cheques
GROUP BY user_id;

SELECT 
    u.first_name, 
    u.last_name, 
    u.email, 
    u.birthdate, 
    u.id, 
    u.sex, 
    c.name, 
    u.facebook_id, 
    u.created_at, 
    u.last_active, 
    u.referrer_id,
    du.date_unjoin,
    lo.date_last_order,
    cd.cheque_date 
FROM 
    users u
    LEFT JOIN temp_date_unjoin du
        ON du.user_id = u.id
    LEFT JOIN temp_date_last_order lo
        ON lo.user_id = u.id
    LEFT JOIN temp_cheque_date cd
        ON cd.user_id = u.id
    LEFT JOIN countries c 
        ON u.country_id = c.id 
;