Indexes and Hints are fundamentally different.
An index is an additional data structure that you can instruct Oracle (or pretty much any database) to create automatically for you to make lookup faster (at the cost of making insertion and update a little slower because that data structure has to be inserted and/or updated too).
The optimizer will look at every statement you send and decide which indexes to use to make it as fast as possible.
But the optimizer cannot work magic, it's only as good as the data it gets and the programmers that built it. So sometimes, the optimizer picks an index that you know is not the best for that statement.
For example you may have multiple indexes on a table, one to find a person by name, another to find a person by date of birth and a third to find a person by phone number.
You know that for a certain statement using the person-by-name index would be best, but the optimizer decides to take the person-by-phone index. So your statement is slow.
That is the time for hints. A hint is the way to tell the optimizer: I know better than you. Please use a specific index that I tell you to use.
So to sum it up: indexes make lookups fast. A hint makes sure a specific index is used despite the automatism that says something else. So it's not one or the other. It's indexes first and hints as a way to point to an index you know is best. A hint is useless without an index that it can hint to, while an index on it's own should normally be enough if the optimizer works well.