Hi Justin,
all knowledge is an asset ;-)
The reason I stated that "CRUD events are [..] evil", is because they don't capture intent. Instead, they focus on what an end-state should look like. Axon stimulates its users to think about the actual actions you want to perform. Of course, sometimes these actions are simply "update this data field". But if that's all you have, you might start wondering if CQRS is a good choice.
So instead of "updating" a balance on a bank account, you "withdraw", or "deposit" money. In this case, the intent is much more clear than when "update the balance to its current amount -10".
The UUID's generated identify an aggregate, for example, a Bank Account. All actions that target that bank account, must carry that identifier. An "transaction" is identifier using correlationID's in the event meta data and basically refer back to the ID of the command message itself.
The reason UUIDs are used, it because they are safe to generate on the client side. The fact that they may create some page splits in a query model is an issue that must be addressed exactly there: in the query model. Also note that bigger applications don't have "the query model"; they have several query models for different purposes. Each stored in a database and using a (database) model that is suitable for the purpose they serve. There is nothing from with using a separate (otherwise worthless) sequential primary key to query model entries if it helps your performance. Simply add the UUID as a secondary key, if even required.
The whole reason for CQRS is (or at least should be), that you can optimize both "sides" of the application for their own purpose.
Hope this clarifies things.
Cheers,
Allard