This is for question 1, use single CTE:
WITH CTE1 (row, date, tom)
AS
(
SELECT ROW_NUMBER() OVER(ORDER BY date DESC) AS row,
date, tom FROM table1 WHERE tom = 0 AND date < '24-Mar-2014'
)
SELECT date FROM CTE1 WHERE row = 4
and question 2, need multiple CTEs:
WITH CTE0 (row, date, tom)
AS
(
SELECT ROW_NUMBER() OVER(ORDER BY date DESC) AS row,
date, tom FROM table1 WHERE tom = 0 AND date < '24-Mar-14'
),
CTE1 (date, tom)
AS
(
SELECT date, tom FROM table1 WHERE tom = 1 OR tom IS NULL
),
CTE2 (var)
AS
(
SELECT TOP 10 CTE1.date FROM CTE1 WHERE
CTE1.date > (SELECT date FROM CTE0 WHERE row = 4) ORDER BY date ASC
) SELECT MAX(var) FROM CTE2