When carbon is sp hybridized, it is indeed linear b/c it is also forming two pi bonds so that the net result is a triple bond. There are no lone pairs left on the carbon.
In oxygen though, we have two bonds to the oxygen and two sets of lone pairs. The oxygen is considered to be sp
3 hybridized (see other forum threads about hybridization if this is unclear to you why). So sp
3 hybridization usually gives bond angles of 109.5. However VSEPR tells us that we want to minimize electronic repulsion. According to VSEPR, nonbonding lone pairs have more influence here since they are closer to the atom (in this case oxygen) and their repulsion can be "felt" more than the electrons used in the bonds. These nonbonding lone pairs will therefore push the atoms bonded to oxygen away from the ideal 109.5. In these cases the resultant bond angles are
near/close to 109.5, but not quite (as you say the actual angle is 120 and 110).
Perhaps this portion of the wikipedia page will help:
"This overall geometry is further refined by distinguishing between bonding and nonbonding electron pairs. A bonding electron pair is involved in a sigma bond with an adjacent atom, and, being shared with that other atom, lies farther away from the central atom than does a nonbonding pair (lone pair), which is held close to the central atom by its positively-charged nucleus. Therefore, the repulsion caused by the lone pair is greater than the repulsion caused by the bonding pair. As such, when the overall geometry has two sets of positions that experience different degrees of repulsion, the lone pair(s) will tend to occupy the positions that experience less repulsion. In other words, the lone pair-lone pair (lp-lp) repulsion is considered to be stronger than the lone pair-bonding pair (lp-bp) repulsion, which in turn is stronger than the bonding pair-bonding pair (bp-bp) repulsion. Hence, the weaker bp-bp repulsion is preferred over the lp-lp or lp-bp repulsion" (
http://en.wikipedia.org/wiki/VSEPR_theory)