From the tidyr github page:
tidyr replaces reshape2 (2010-2014) and reshape (2005-2010). Somewhat counterintuitively each iteration of the package has done less. tidyr is designed specifically for tidying data, not general reshaping (reshape2), or the general aggregation (reshape).
So the idea is that you want to separate what each step is doing. Applying function while spreading may be useful, but it put together too many eggs, I think. So depending on the use-case, you may want to apply function before/after spreading instead.