FWIW, the way it's supposed to work is that any *linked* dependency of a builtin or system library [which isn't itself marked builtin] is system. Obviously we can't do that with manually loaded libraries.
Making libmono.dll itself builtin would solve this immediate problem.
I don't think it makes much sense to make libmono system, or anything shipped with it. The point of system libraries is that they don't conflict with native libraries with the same name, but I think that only makes sense for libraries that aren't actually in the prefix, that would be loaded when in the default search path. libmono isn't that and neither would be any of its dependencies *except* iconv.
So if there's a "correct" solution, marking things builtin is probably it, and more importantly I suspect it'll be viewed more favourably than adding internal flags into loader APIs.