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

Answer: 
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.
It's the same class of question as why can't I change the value of a const variable, why can't I access private class members from other classes or why can't I override final methods. 

Because that's the purpose of these keywords, to prevent you from doing so. Because the author of the code deemed doing so dangerous, undesired or simply impossible due to some abstract reasons like lack of essential functions that need to be added by specific child classes. It isn't really that you can't instantiate because a class is virtual. It's that inability to instantiate a class defines it as virtual (and if a class that can't be instantiated isn't virtual, it's an error. Same goes the other way, if instance of given class makes sense, it shouldn't be marked as virtual)