I have an issue in my implementation where the pageview is being called before my datalayer is populated, throwing up an error. I have implemented a custom code to fire rather than using the standard implementation within DTM.
DTM should be able to handle anything that you load prior to DTM loading. For example, if you loaded jQuery before DTM, you should be able to use jQuery.
As for the data layer, it is best to split it with all the static data (ex: product data on the product page) available during page build coming before DTM and all data coming via ajax can be added after page body load (ex: pricing data on product page).
Additionally, I'd suggest a look through the load order documentation. There may be various events that you can utilize to accomplish your goals. If all else fails, you could use direct call rules to fire the beacons from the page.