While there are many known NP-complete problems, they all seem to be discrete in the solution space. What is the underlying principle for this?
It could appear to be the case that "discrete problems" are hard while "continuous problems" are easy. In fact, the exact question has already been asked on TCS.SE here. The answers list some continuous problems that area actually hard to solve.
As usual, computational problems come in all colors, shapes, and sizes. It is not a rule that continuous problems are always easy. In this sense, there is no "underlying principle". I think the following comment by Sasho Nikolov puts it well:
I think the whole discrete vs continuous thing is a red herring. A problem has to have very special structure to be efficiently solvable. I think the real difference here is that in the case of easy continuous problems the special structure tends to be convexity, while in the case of easy discrete problems things look more complicated: sometimes the structure is submodularity or matroid intersection, but often it's not. This probably has more to do with the fact that we don't yet understand discrete math very well.