How can I add or remove links to nodes in a list depending on the values of some of the fields
This is probably one of those questions that might fall under opinion-based, but I'll give my answer.

The answer really depends on your needs. It comes down to the question, does stub content impact display or workflow (editing, moderating, viewing, etc.) around the content? In either case, you'll want a centralized piece of logic (e.g. mytheme_is_stub() or mymodule_is_stub() function) that determines if the content meet your stub criteria. 

If it impacts just the display then you want a theme; you can use your centralized logic to determine when/where to alter rendering of content. 

If it impacts the workflow (e.g. you want to prevent an author from creating stub content or alert them about stub content) then you want a module; you can use your centralized logic to determine when/where to alter workflow around the content.

From your description (altering links, search display, etc.), it sounds like your only concern is display, if that's the case then you want a theme.