I have to admit that I use gosubs all the time and I'll also admit that I don't think it's better, it's just how I prefer to code.
However, I think if I end up having to declare a long list of globals to get the code to work then I don't see much difference between functions and sub-routines.
I do use functions but generally keep them to ones where the variables have to be passed to them, with a single value being returned if appropriate, that way they are truly modular and I can just lift them from program to the next without having to make sure I don't have conflicting global variables.
I never call subroutines from within functions, I've never done it and don't know the consequences of doing so, but I do sub-routines from within sub-routines and functions from within functions.
I did try to make a game using only functions but realised I was becoming more concerned with trying to code "properly" than I was making the game so I just did what I was comfortable with.
I agree with Baxslash and think it's important to keep the tier 1 language as simple and forgiving as possible (yes, I'll also agree that it's not entirely clear what global and what isn't but I just assume that TGC have a good reason for doing things like that). BASIC is supposed to be a beginner language, it's what the B stands for. OK, it might teach a few bad habits but it's better to learn a few of those than to learn nothing at all.
BASIC was also designed for people who understand maths and physics (or whatever) but have no time or inclination to learn a more complicated or demanding language. This is the camp I fall into, I like that I can take stuff I've learned - such as springs and pendulums - and easily code it into a game or demo.
If AppGameKit tier 1 became too strict then I'd probably find it too much of a faff and stop using it or be less inclined to use it.