Cool. So the secret is you first need to get the current permissions. This is a bit of a mess, but it works.
current = stat.S_IMODE(os.lstat("x").st_mode)
The idea is that lstat.st_mode gives you the flags, but you need to crop that to the range that chmod accepts:
help(stat.S_IMODE)
#>>> Help on built-in function S_IMODE in module _stat:
#>>>
#>>> S_IMODE(...)
#>>> Return the portion of the file's mode that can be set by os.chmod().
#>>>
Then you can remove the stat.S_IEXEC flag with some bit operations, and this gives you the new number to use:
os.chmod("x", current & ~stat.S_IEXEC)
If you're not familiar with bit twiddling, & takes only those bits that both numbers have, and ~ inverts the bits of a number. so x & ~y takes those bits that x has and that y doesn't have.