Before we dive into the importance of Exploratory Testing, I would like to clear three things up.
Firstly, I align with this definition of Exploratory Testing, by Cem Kamer, it is an approach to software testing that consists of simultaneous learning, test design and test execution.
Secondly, I don’t think Exploratory Testing has to be a substitute for test cases, it can complement test cases. (It’s up to you, how or if you choose to combine both Exploratory Testing and Test cases when you test a feature)
Lastly, exploratory testing is not adhoc testing – adhoc testing is random, unstructured testing, exploratory testing forced you to think critically about the application under test. (For more about the difference go here.)