Well, I think you already know the answer to your main question here. Everyone is pretty much in consensus here: you don't raise the price for a customer unless they added something to the job or there was some big surprise you ran into. Otherwise, if you under-estimated on time or materials, the honorable thing is to just eat it and count it as a learning lesson and learn how to bid more closely. That's how most all of us do it.
It seems obvious that your real problem is the employee situation. For that, there's no single perfect method that will apply across the board, for everyone across the nation. The sort of laborers and labor pool you have over in IA is probably radically different from the sort I have here in Oregon. So what works for us may not work for you in terms of how to find good workers.
I think there are only some basic truths to labor in general that you can count on. But other than that, you're probably just going to have to figure out on your own, through trial and error, how to come up with a really good crew. That's how I had to do it.