Question: I know it is not allowed in C++, but why? What if it was allowed, what would the problems be?

Answer: 
The problem is simply this: 

* what should the program do when an abstract **method** is called?
* and even worse: what should be returned for a non-void **function**?

The application whould proabably have to crash or thow a runtime exception and thus this would cause trouble. You can't dummy-implement every abstract function.
Abstract classes are non-instantiable *by definition*. They require that there be derived, concrete classes. What else would an abstract class be if it didn't have pure virtual (unimplemented) functions?