Your first version:
You’re not accounting for elements moving when removing one of them. If you don’t mean for letters to move when you remove one of the others then list’s remove method doesn’t match what you mean and you will need to either use something else or change your plan.
list.remove does a lot of things that aren’t helpful here (wrong tool for the job) and is nothing but a whole lot of potential surprises
Your second version:
When you compare to a vowel in your if-statement, all other vowels are “allowed”, for example, if you have the letter ‘e’ and you compare to ‘a’, ‘e’ will be allowed because it isn’t equal to ‘a’, and it will be allowed multiple times even though it’s only one letter because you repeat this multiple times. Instead you need to compare to all vowels, and only after having done all those comparisons are you in a position to determine whether to include the current letter or not.
You’ve determined that there aren’t enough iterations happening, did you stop there? Sounds to me like a lead to follow up on, to start adding print statements in your code to find out when and where it exits. Your code very much says to exit at that time, there’s no subtle gotcha here.
Get yourself a better understanding of what everything you use does. Experiment with individual operations. If you figure out how to visit each letter, test whether to keep it, and to put letters together into a string - if you know how to do each of those then combining them is a rather trivial matter, and figuring out each one on their own is also a rather trivial matter.
Why do your loops start at -1? On one hand it’s a good thing that you adjust as needed, on the other I think you adjusted the wrong thing when you should be visiting positions 0 up to the last one.
Much better yet is to not count at all, and to instead iterate over the letters (can’t really mess up “each letter”, but you can mess up the counting (and you do, except you exit before that happens))