Nothing is wrong with Mathematica with respect to the statements you appear resistant to acknowledging that those aren't generally true (despite counterexamples given to you). I would argue that is is you who needs to supply the assumptions appropriate for your objectives.
And you've used the wrong form and location for Assuming
in the code you posted. (An indication that an error occurred should have been observed.) The statement in your code
a^p/a^q == a^(p - q), Assuming[a, a != 0]
should probably be
Assuming[b > 0 && a > 0 && p > 0, (a/b)^p == a^p/b^p]
although that doesn't get you anywhere. You can explore with various assumptions. Consider the following:
FullSimplify[(a/b)^p == a^p/b^p, Assumptions -> {b > 0}]
(* True *)
FullSimplify[(a/b)^p == a^p/b^p, Assumptions -> {b < 0 && a < 0}]
(* True *)
While I am no mathematician, it does appear that the truth of your equality depends on various assumptions.