I see what you mean the neck shouldn't be that hard to fit to the hole.
Right try this:
$fn=100;

sd=132.48; //sphere diameter
wt=2; // thickness of sphere wall
hs=25; // hole size
ln=25; // length of neck

//Sphere

%difference() {
sphere(d=sd); //create sphere with diameter set by sd
sphere(d=sd-(2*wt)); //remove sphere from centre of original sphere - size defined by wt
translate([0,0,-sd/2])cylinder(d=hs,h=wt*2); // remove hole from bottom of sphere - diameter defined by hs
}

//Neck

difference() {
translate([0,0,-ln-(sd/2)+wt])cylinder(d=hs+wt,h=ln);
translate([0,0,-ln-(sd/2)+wt])cylinder(d=hs,h=ln);
}
Basically you have to move the cylinder by it's own height and then by half the diameter and then by the wall thickness. If you see I've got % in front of the sphere script. This makes the sphere transparent so you can see where the cylinder actually is. Very useful.
But you must remove the '%' before f6 rendering, otherwise it ignores everything with % in front of it.

so final renderable script:
$fn=100;

sd=132.48; //sphere diameter
wt=2; // thickness of sphere wall
hs=25; // hole size
ln=29; // length of neck

//Sphere

difference() {
sphere(d=sd); //create sphere with diameter set by sd
sphere(d=sd-(2*wt)); //remove sphere from centre of original sphere - size defined by wt
translate([0,0,-sd/2])cylinder(d=hs,h=wt*2); // remove hole from bottom of sphere - diameter defined by hs
}

//Neck

difference() {
translate([0,0,-ln-(sd/2)+wt])cylinder(d=hs+wt,h=ln);
translate([0,0,-ln-(sd/2)+wt])cylinder(d=hs,h=ln);
}


Looks like a classic anarchist's bomb All we need is a plug, some black powder and a fuse :-)
Also looks like the gourd Asterix carries his magic potion in :-)