UDataAssets are typically only instantiated once per asset, and they are shared across the engine. So they can be read from any place. They are tipicaly just for reading data.
UObjects are mainly for dynamic, mutable runtime data. Not shared since they are runtime generated instances.