a) Porque foi definido assim ( JLS, pg. 169 - parágrafo 8.4.3, Method Modifiers. Definição não se discute, cumpre-se; é a mesma coisa que falar com o seu advogado sobre a lei ou portaria número NNN 
A compile-time error occurs if a method declaration that contains the keyword abstract also contains any one of the keywords private, static, final, native, strictfp, or synchronized.
b) Para você entender melhor, no caso de “native”, “synchronized” e “strictfp”, essas palavras-chave aplicam-se apenas a métodos “concretos”, ou seja, implementações. É um detalhe de implementação que um método seja “native” ou “synchronized” ou “strictfp”.
A palavra “abstract” é para métodos “abstratos”, ou seja, especificações. No caso “private”, é porque um método “private” é invisível em uma classe derivada, ou seja, não faz sentido especificar algo que não é mais visível.