How to remove 'skip' edges from a DAG? (How to find only the longest path from each node to each of its sinks?)
On the question from title

For fixed sink $s \in S$ you can find maximal distance from each vertex to this sink by running dynamic programming on topological order:
$$
d(v)=
\begin{cases}
0\text{ if } v = s\\
-\infty \text{ if } v \not= s \land v \in S\\
1 + max_{(v, u) \in E} d(u)
\end{cases}
$$
You can run this algorithm for every $s \in S$ to get the solution for whole problem.

On your problem

Unfortunately your approach won't work, look at this graph:

A
|\
B |
| D
C |
|/
E


If you would look only for longest path to E from A, you would ignore existence of node D. So unfortunately I think you need to go with more "brute force" approach where you will have to run BFS/DFS from every node in the graph and check the number of reached nodes.