Ваша проблема в том, что вы добавляете объекты экранов в менеджер экрана (и вы увидите только эти объекты), а затем вы создаете новые объекты и вносите в них изменения. Так как вы используете глобальные переменные, самое простое решение будет:
sm = ScreenManager()
menuscreen = MenuScreen(name='menu')
settingsscreen = SettingsScreen(name='settings')
sm.add_widget(menuscreen)
sm.add_widget(settingsscreen)
А внутри классов вы можете просто внести в них изменения, например:
menuscreen.darkmode()
PS «self» означает объект класса, в Python self используется для доступа к переменным и функциям класса из функций, определенных в этом классе. И здесь вам не нужно отправлять 'self' другому классу, потому что вы отправляете объект класса SettingsScreen в функцию darkmode MenuScreen и ничего с этим не делаете. Если вы хотите отправить объект, должно быть:
# you send object of SettingsScreen
menuscreen.darkmode(self)
# and receive it as obj for example
def darkmode (self, obj):
...