Replacing a variable in a loop by records from a Table
Selecting from Date_Table in a
One option is to select Exit_Date direct from Date_Table in a. The ordering of the end results won't be the same so you may need to add an ORDER BY clause (e.g. with DATEPART()).
 with
      a as(
        select dateadd(yy,-1,Exit_date) d,0 i
        from Date_Table WHERE Date_ID &lt;=5
          union all
        select dateadd(yy,-1,d),i+1 from a where i&lt;14
      ),
      b as(select d,datediff(dd,0,d)%7 dd from a)
SELECT d from b --order by DATEPART(MM,d) desc

See a sample here in this SQLFidle.
Cursor
Like I mentioned in my comment, another option is to use a Transact-SQL cursor. In the squery below, we keep the temp variables @d and @EDTable. The SELECT statement from Date_Table could have ORDER BY Date_ID ASC added if you wanted to ensure those go in order (in case the records were not added sequentially).
declare @d date;
declare @EDTable table (Exit_Date  Date);
declare dateCursor CURSOR FOR 
    select Exit_Date from Date_Table WHERE Date_Id &lt;=5;
    
OPEN dateCursor  

FETCH NEXT FROM dateCursor INTO @d

WHILE @@FETCH_STATUS = 0  
BEGIN 
    with
      a as(
        select dateadd(yy,-1,@d) d,0 i
          union all
        select dateadd(yy,-1,d),i+1 from a where i&lt;14
      ),
      b as(select d,datediff(dd,0,d)%7 dd from a)
     insert into @EDTable select d from b;--*/
    FETCH NEXT FROM dateCursor   
    INTO @d 
END   
CLOSE dateCursor;  
DEALLOCATE dateCursor;  

SELECT * FROM @EDTable

I am trying to get a SQL Fiddle working but having issues with the line endings. I will update when I figure that out.