Like Alvin already mentioned, your requirements sound quite similar to what Experience Optimization does; you may want to take a look at the XO/SmartTarget Module to see how this kind of functionality is implemented there.
Spoiler: the XO/SmartTarget Module leverages the concept of Regions and can dynamically populate "SmartTarget Regions" with the results from an XO Query; if the query yields no results, it will keep fallback content coming from CM (if any). Technically speaking, the XO/SmartTarget Module uses a so-called Page Model Builder to dynamically inject Entity Models in the SmartTarget Region Models.
Another common way to dynamically modify View Models is using a custom Entity Controller. You already mentioned you have a Component Presentation (Entity Model in DXA speak) which represents a placeholder to be personalized. With a custom Entity Controller, you can dynamically post-process this Entity Model (if needed, it can even completely replace the Entity Model with another, based on a dynamic query).
Several DXA Modules have custom Entity Controllers. For example, the Search Module has a SearchController.