There is nothing wrong in the agency's business model that you described. @Codegnome already explained it well.
I just want to suggest alternatives when you have limited budget:
1. Post the tasks on freelance networks such as elance, freelancer, etc.
The freelance networks will act as arbitrator, holding your money and only transfer to developers' account once the job is done. That way you can significantly reduce risk. One more plus point is that, many developers are very eager to build up profiles and they will work hard to finish the job even the payment is not comparable to effort.
Experiment with some tasks and see how it costs. Once you are familiar and have trust in some particular developers, you can choose to only work with them only.
Disadvantage is that despite the fact that there are many good
developers on freelance network, sometimes you encounter a
irresponsible one. You might not lose money, but your task is not done
and you wasted effort in communicating with the developer.
2. Find a freelance developer
Find a good developer on stackoverflow and github or other trusted sources. Connect with them directly. Ask them to do 1-2 small tasks (4-8h) as an experiment. If they do them well in reasonable time, you will trust him as your agency and pay for the done tasks.
Then each days you will provide him with some tasks and check the time he logged frequently. Put a limit such as he can only log less than 30 hours per week.
I was developer and was working as agency, in this business model. The client appeared to be happy.
But since you get the high quality developer, their rate are often
very high.
3. An outsourcing company.
Both option 1 and 2 will need your effort to communicate and watch over agency's work frequently. If you don't want to spend much time on it, do as you are currently do - working with a company in their business model. Try it for a month and see yourself. You can also put a limit such as 160 hours per month, to reduce risk.