To see whether something is positive or negative, you aren't necessarily looking at whether the outer shell is full or not. There are two ways to look at why the hydronium ion is positive:
1) Number of protons v. number of electrons. Each of the three hydrogens has one proton each and the oxygen has eight protons, giving a total of eleven protons. Hyronium has only ten electrons (eight outer shell + two in oxygen's inner shell [1s orbital]). Therefore, it has a net charge of +1.
2) Formal charge (seehttp://en.wikipedia.org/wiki/Formal_charge#Formal_Charge for a more complete discussion). Formal charge is defined as:
(number of valence electrons of the atom) - (1/2) * (number of bonding electrons) - (number of lone-pair electrons)
So since oxygen atoms have six valence electrons and in hydronium it has six bonding electrons and two lone-pair electrons, its formal charge is 6 - 3 - 2 = +1