I personally play "Neo" stall. I prefer to avoid focusing on one method of attrition and instead run sand, burn, toxic, stealth rocks and leech seed (seeds are my personal favourite) all on the same team. I often miss not having spikes against slower teams, against faster ones I'd much rather the moveslot spent on Powerwhip and since people tend towards forfeiting turn 3...
I don't even bother to run a spin blocker, it's too much effort to worry about blocking rapid spin when your opponent could just run a defogger anyway. It's not even that defog sees that much use, but that it can see use (and if it begins to see more, I'm work Bisharp into my team) that makes spin blockers and fast taunters not worth it. I'm still perfectly willing to run spikes on a team, but with Ferrothorn as my rocks setter and only possible spiker, I just don't have the moveslots to deploy them. Defog and Rapid spin don't hurt too much for spikes either, a turn spent removing hazards is a free turn I bought for free when I got the opportunity to set them up and I got some damage out of the deal.
Toxic spikes however are completely not worth using. You spend two turns for your spikes to be at an acceptable stall breaking level and your opponent just switches in a poison type (which is probably something they'd do anyway). Until they get the opportunity to absorb the spikes, they simply stick with Natural cure mons, Lum trevenant, steel types and aerial pokémon, which can be a significant portion of the team. They also prevent you from burning things mune to them. Sure, I've had a game where I had free turns with Tentacruel and set up, but the spikes never really do much since the toxic also needs more turns to build up.
That's not because of Defog, that's because Mega Lucario, Genesect, Aegislash, Rotom, Talonflame and thing teams have 5 pokémon minimum immune to them.
That all being said, never neglect the power of directly attacking a frail enemy. A physical wall spends all their EV investment on not dying, a physical attacker can only invest half their EVs on killing.
While it is possible to create teams with multiple different win conditions (the example you gave would be classed as balance), semistall doesn't fit into that. Semistall basically is a pure stall team, with typically just one offensive Pokemon which abuses the accumulating residual damage to sweep or wallbreak in the mid- or late-game. Think of it as a stall team that sacrifices an extra wall or support mon in favour of being able to end a game more quickly.
That's semi-stall? My God I need to up my game. I thought stall could get away with one potential sweeper.