Hints allow a developer to override the execution plan that Oracle would have chosen otherwise.
If an SQL statement is not modifiable (for example because it is exectued from a 3rd party application), it is still possible to inject hints into the statement with SQL patches.
With adaptive query optimization, the statement executor can adjust an SQL execution plan (which was created at compile-time) at run-time.
SQL plan directives store statistical information about past executions of an SQL statement. They're used to (hopefully) create a more optimal plan for a future execution of the SQL statement.