BurntPizza already covered it, but let me expand: how would your “index foreach” work on data structures that have no concept of indexes? How would they work on a Set, for example? What about data structures where get(index) is much less efficient than an iterator, such as linked lists?
The Iterator approach allows us to “foreach” over custom classes just by implementing Iterable. With your approach, we’d have to implement a get(index), which doesn’t make sense for every (or even most?) data structures.
Besides that, nothing is forcing you to use the “enhanced for” shortcut. If you really need to iterate over your data structure by index, then you can still do that.
I assure you that the developers of Java have put more thought into this than any of us have. What exactly are you saying is the downside? What profiling have you done? What is the alternative?
To get a better understanding of the considerations that go into these kinds of decisions, I recommend Program Development in Java by Barbara Liskov, or really any of the books she’s written on API design, abstraction, and substitutability.