In my opinion, if you have a choice between developing proprietary software and doing nothing at all, you ought to do nothing at all. Proprietary software is a trap; useful features are the bait. So if there's no possible way you can develop this engine you want to develop ethically, I suggest you just wait for PGE to develop further.
I'm not advanced enough at C++ to code for either of those games
I learned C and C++ by contributing to Project: Starfighter and Naev (especially Naev). You don't become "advanced" in a language out of thin air, and you don't need to be "advanced" just to make small changes.
logic loops, memory management
I don't know what you mean by "logic loops", but GML isn't the only programming language with automatic memory management. Python is another example, and I've even developed yet another libre platformer you could use as a base for what you want to do, ReTux, in Python. Not to mention libre engines like Godot and GDevelop.
would you mind telling me how I would edit enemies in either of those programs
I don't know since I've never contributed to either of them. But I can tell you the principle behind it.
making an alarm that happens a certain time after the NPC spawns
An "alarm" is just a function call that happens in the main loop, which either decrements the number if it is greater than 0 or does the action if it is equal to 0. But this isn't actually what you would do. See the next one.
in which it shoots a hammer projectile
You would probably just copy and paste, or even simply link to, the code that the dispenser uses.
direction based on which way it is facing
You check the direction variable, and you choose left or right.
I know how to do that in Game Maker Studio, but not in either of your alternatives, which is why I said that the Hello Tux Engine would be a good place to start for amateur game makers.
You're thinking of the problem in overly specific terms. To conclude that the SuperTux engine is too hard because such a specific solution doesn't work or doesn't work well would be preposterous.
Different games are coded differently. This is true regardless of what engine or language is used. Therefore, solutions to problems are different. Like I said, I know nothing about how SuperTux's codebase works, so let me bring in an example of a codebase I am familiar with. In Project: Starfighter, it would make no sense to talk about an "alarm" in the sense you're thinking of. what you do instead is read the "engine time" variable (which counts frames) and use the modulo operator on it based on the interval you want to do it. So if you wanted to do something every 5 seconds, then since the game runs at 60 FPS, you would do something like "if (engineTIme % 300 == 0) { /* Do something */ }". In that context, it's much more elegant than the "alarms" paradigm.
Of course, this is all a moot point anyway, because you don't have to do
any of this if all you want to do is replace graphics. Just make a skin for PGE. They're already taking care of the rest.