Can't help you with spearfishing. Lots and lots of line fishing for anything ranging from large marlins to large tunas or other large fish... Cabo San Lucas itself is a protected reserve. Gordo Banks (a good couple of hours away by boat) is an offshore seamount (read: upwelling with lots of nutrients) with lots of game fish.
There are several dive operators, ranging from small (Baja Dive) to large (Cabo Acuadeportes; Ocean Scuba) and in between. They all appear to be good, friendly places.
Most close-in diving is boat diving from Cabo itself; leave the Marina towards Lovers' Beach (about 5-10 minute boat ride) and dive. The visibility was not great (less than 10' to about 15') when we were there in May, but I'm told that June-October, the water gets warmer and the visibility gets dramatically better. You could do most of the boat dives as shore dives from Lovers' Beach, but you need to take a water taxi to get to Lover's Beach, so might as well go from the boat...
About 13 km from Cabo, there's Chileno beach where you can do shore diving; Cabo Acuadeportes has a satellite location there with gear rental.
Most dive shops will also boat you to either Chileno or Santa Maria beaches for boat dives, or Gordo Banks with prior arrangements.
About 2 hrs drive from Cabo is Cabo Pulmo marine park, where the water is generally warmer, clearer, and full of life. We snorkeled on our own, but in retrospect, should have hired a boat, as Cabo Pulmo is very large, and the reef system goes out for quite a distance with some potentially dangerously shallow surf. There are 2 or 3 dive outfitters at Cabo Pulmo, or you can arrange a trip from Cabo (where you'll get arranged van transportation + lunch/snacks)
I used Baja Dive; Paco was the main guy, assisted by Victor. They have one boat that can hold 6 divers (with 6, they generally use both Paco and Victor; with fewer, just Paco himself). Not fancy, but extremely nice folks.
I highly recommend the Lonely Planet Guide to Scuba Diving Baja California.