Why Non-parallel but full case statement uses ROM not the MUX?
Why the non-parallel case uses the ROM instead of the MUXs? 


Because that's the right thing to do here!

You feed in values, you get out static values. Classical case for ROM, or in the case of FPGAs, an elemental LUT.

A mux would need the same LUT to mux the right static signals. So, the mux solution for this static case is less efficient than just ROM.


  In other words, it should uses multiple 2-to-1 MUXs to represent priority in between the case items.


I don't see a reason why.

Regarding your edit:

You implicitly define a priority order when doing your else if thing, so here, the synthesizer has no choice.