You probably want only C and D in your output since only C and D are on leave, rather than B,C,D? Let me know if that is correct.
SELECT u.userid, u.username, u.useremail, u.userphone, u.specialid
FROM users u
LEFT JOIN absent a
ON u.userid = a.userid
AND CURDATE() BETWEEN a.startdate AND a.enddate
WHERE a.userid IS NULL;