Absence of an accepted hardware model. Until very recently, no one agreed on what a parallel machine should look like. Proposals for the design of parallel machines varied so much that no software base could span all proposals. The advantage of shared memory machines is that the problems of distributing data to processors and communication go away. Unfortunately, no one knows how to build a shared memory machine that scales to large machine sizes.
Performance is all that matters.
The only reason to use parallel programming is to make code run faster, period. If you aren't after performance, you might as well use a sequential language. Not surprisingly, the users interested in parallel programming are those with the greatest performance demands, which historically have been in scientific computing. This is a niche within computing. In addition, it has been very difficult for parallel programming to compete with the dramatic increases in speed in sequential computing and users have voted with their feet.