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.
Because logically it does not make any sense.

An abstract class is a description that is incomplete.  

It indicates what things need to be filled out to make it complete but without those bits its not complete.

My first example was a chess game:  

The game has lots of pieces of different type (King,Queen,Pawn ... etc).

But there are no actual objects of type piece, but all objects are instances of objects derived from piece. How can you have an object of something that is not fully defined. There is not point in creating an object of piece as the game does not know how it moves (that is the abstract part). It knows it can move but not how it does it.