Moran has pointed me to the CROSS APPLY syntax in T-SQL 2005, which does allows joining against a table valued function. Using this, the query goes down to this:
CONVERT(NVARCHAR, CurrentDate,103) Date,
HasWorked = CASE SUBSTRING(Roster,
WHEN '_' THEN 0
WHEN '*' THEN 1
FROM Schedules CROSS APPLY DateRange(StartDate,EndDate)
This is much nicer way to deal with it. Considerring that I am using similar techniques all over the place, this is a really good thing to know.