I will admit that I've not done any large client side projects in a while (my client work has been for 9 months, and I've been focused very much on the server side).
Architecture.
Honestly, I don't think I have a good structure for this right now. I've got a good workflow for node projects, and structure, but client side I'm not so sure. JS Bin has a rough category of directories in the js folder, and then everything is "supposed" to be a small module. But the downside is that it's all cat'ed together, so there's variables that leak from one script to another.
I love the require system that node offers, but I don't like what require.js forces me to write. I don't use transpilers, so that means I don't use browserify (though I know this has an excellent rep).
Maybe using ES6 import will be the way I go, but until it lands natively in at least one browser (hopefully Chrome since that's where I enjoy working).
Not a great answer, sorry!
BEM
We're using BEM on the current client project, but I don't personally use it. I've read how it's supposed to work, and it does make a lot of sense, but (as I mentioned in another answer) because I don't use it day to day, it doesn't stick in my head.
However, the output from using BEM has impressed me so I'm likely to try to learn how it fits together.
How do I learn
Generally I skip, and I mean super-super light skim of a blog post or two. Typically looking for the source code, copying and pasting and seeing if it works. If it doesn't, I might abandon. If the source is too complex (like WebGL!) I tend to attempt a tutorial but quickly abort.
I definitely learn through trial and error. I've bought a load of books over the years, but in practise, I'll only read a few pages.
I do reach out to Chrome devrel with questions though, and it's their job to help developers, and Jake Archibald in particular has been extremely helpful in replying and helping me grok concepts like promises (from earlier years) and service workers.
Where do I apply those skills
Pretty much anywhere I can. I'm not good at inventing problems to apply new tech to, but if I have an existing problem, I'll go to work on it.
That can range from writing C for my Pebble so that I can stop my Toggl timer from my watch, to learning about Selenium so that the client I work with can run full functional tests.