Optimal substructure means: after making a greedy choice, the remaining problem is a smaller instance of the same problem, and its optimal solution combines with your choice to form the overall optimum.
Here's similar to the optimal substructure in dynamic programming. The difference is how you use it. In DP, you try all choices and pick the best. In greedy, you make one choice and trust it is correct. Both properties must hold for greedy to work. Missing either one means greedy will fail.