The difficulty with loop is it takes something trivial and makes it more complex than it needs to be. Simple things are not simple. Complex things are rare and loop doesn't simplify them enough.
If you ignore the hyperspec, however, and get a feel for it by looking at examples and writing code using it, it becomes quite simple. It is very useful when you are translating C or Java code.
I find it quite readable in comparison to many of common lisp alternatives for iteration. And I kind of disagree that simple things aren't simple.
(loop for i from 0 below 10 do ...)
Is pretty much the simplest construct that you normally need.
Granted, I would likely just use dotimes in that case... but lets say you are iterating between 5 and 15, dotimes becomes unwieldy, where the for loop is pretty much the same code with the numbers changed.
(loop for i from 5 below 15 do ....)
Now try incrementing by 2
(loop for i from 5 below 15 by 2 do ....)
compare to the similar do* code
(do* ((i 5 (+ i 2)))
((>= i 15))
Not that I don't understand your point... in fact, as little as a year ago, I felt that way too... but I have since changed my mind.
My current preference is to use do* if writing a macro that needs iteration, and to use loop when I am doing something similar to a list comprehension or array traversal.