We are in a similar boat - the OOTB 1:N between accounts and contacts is just not useful to us at all, as it does not reflect the reality of our data or how we need to manage it. We've reviewed using Connections, as suggested, but we decided that did not work for us as there were too many specific fields around this particular connection that wouldn't apply to other types, and the Connections are still using legacy forms (which are much more limited in how you can adjust the forms, what they look like, etc...). The Connections may work for you, so definitely review them, but if not...here's some of our experiences. Before I go into it though, I'll highlight two things that may come up regardless of whether you use Connections or whether you use a manual N:N - basically, if you end up having any type of N:N relationship between accounts and contacts.
1. The OOTB functionality of the Social Pane, that shows all of the activities, notes, and posts, has special functionality around the base 1:N relationship between accounts and contacts. All activities from child contacts of a given account will get rolled up to be visible on that parent account. If you're not using that 1:N relationship, you'll be missing that functionality. If it's important to you, there are ways around it, but that's a whole different topic.
2. Are you planning to sync contacts to Outlook as Outlook contacts? Any kind of N:N connection between accounts and contacts can complicate that. I also won't dive into that unless you're planning on doing it, though. :-)
We are using a manual N:N with a linking entity, as you talk about in your original post. In terms of getting data to flow/populate, we just have a subgrid on the accounts (and on the contacts) for those connections, and therefore adding the contact and its link is kind of a two-step process - they add the contact, save it (this is required for the sub-grid to be active), and then click the plus on the sub-grid to create a new connection (which is where we add the fields like role, email, etc... that are specific to the connection between this account and this contact). We've made this a quick-create form, so this second step doesn't take them to a new screen. It's not ideal, but it's the best we've come up with so far. This way, those specific fields are on your linking entity directly, not the account or the contact entities, so you don't have to worry about flowing data in, keeping it updated across entities, and so on. And hopefully, Microsoft will add in-line edit to their editable grids, so that you could add the connection record directly into the subgrid rather than having to click the + for a new record. One last thing to keep in mind - for the + to work like you'd desire, you'd need to make the contact field required on your linking entity. That way, when you click the + from the contact, it will automatically go to create a new one and fill in your contact, rather than giving you the option to link to an existing connection record, which adds extra unwanted clicks.
Anyway, I've worked on this whole area a lot, and can certainly delve deeper into any area of it if it would be helpful. I just *really* hope there's some improved functionality in future around facilitating N:N relationships between accounts and contacts, since the Connections often don't cut it when dealing with these two entities in particular (for the various reasons above, and others. I could go on and on. :-) ).