I think you need to set a few boundaries. You are putting up with alot and not seeing things change the way you like. You already know that you can't change him, so work on yourself. First, work on improving your self-esteem by spending more time with people who make you feel good about yourself. Make time for the activities that make you feel good about yourself (GAL). Also, how can you react differently to things that he does (in a way that won't make you feel bad about yourself?)
There is a difference between being there for him and being a doormat. Take care of yourself! Hugs...