It really matters little if a player enrolls and leaves without ever contributing or fails to enroll. To the extent it makes a difference, it might actually be preferable to learn earlier that the player won't contribute. A player who doesn't enroll gives you more advance notice that you need someone at that position in a subsequent class.
If you sign Player A and Player B in February of 2016 and Player A doesn't get in, you know right away where a need will exist in the future. If player B gets in redshirts one year, plays little or not at all his second year and then leaves, you learn later in the game about the need that will exist in the next 2 years.
Some attrition is built into the system: 25 per year but with an 85 overall cap
can be viewed as meaning 31% attrition, give or take a little, is expected. Meaning as long as you generally have 17-18 make it through from each class you are operating at expected peak efficiency. Not being at "peak" efficiency is unsurprising and quite possibly the norm. If you had a team that only retained 11-12 players per class all the way through, you might have a roster that would look something like:
11 senior eligibility
14 junior eligibility
18 sophomore eligibility
19 RS frosh
4 true frosh active
19 true frosh sitting out
That's 66 active players and 85 on the roster. If you have that your real issue is not depth but how good are the best 40 or so active players.