Agreed that as a general principle, separate UA teams should be avoided if at all possible. That being said, smaller developers typically won't be capitalized to support a team of 3-5, which is, in my experience, the minimum team size needed to maximize returns.
What I have seen work, to varying degrees of success, is splitting by "channel priority". That is, the internal team (however large) identifies the 2-5 channels that are both most important to the company and can be reasonably managed by this team; the external team (typically an agency) is responsible for executing across all other channels. The biggest drawbacks to this approach, as you outlined, are attribution issues and (potentially) bidding against yourself. However, if the bulk of UA budget is allocated internally to the prioritized channels, spreading out additional budget to experiment with additional channels may yield solid results.
What may be frustrating for most is that there is no best answer. The biggest mistake I see is indiscriminately adopting the team structure/strategy of another company. Available resources, portfolio size, company goals, etc., are rarely if ever consistent across companies, and these elements should be the starting point for making any determination about team construction.