Yes your game may function, but is it functional? I wrote our game in MonoGame and F# -- a mostly functional programming language -- and I did it mostly using pure functions and following a sketch of The Elm Architecture.
Ok, maybe the view function is effectful because encoding your .Draw calls in a discriminated union feels like too much, even for me, and maybe I left a few bits of extremely mutable state in there because I couldn't be bothered to include them in the state type, but I think I did better than the last time.
So, we do have a GameStateMachine union this time. It defines all the states that the game could be in:
fsharp
type GameStateMachine =
| SplashScreen of int
| Menu
| Intro of int
| Day of int * DayState
| Interim of int
| EndScreen
| Credits of int
All this state is held in a mutable state variable. There's no real enforcement of read/write permissions in the methods, but .Update is the only one that was allowed to actually write to any of the variables while .Draw could only read.
Both of these functions are just very big pattern matches on the state variable. .Update is supposed to be a function that takes a GameStateMachine and returns the next GameStateMachine (in practice it updates it in place) and .Draw takes a GameStateMachine and issues side effects to the MonoGame APIs.
Why is this relevant, you ask? Well, I think having such a simple architecture enables for fast prototyping and few bugs. We had some friends playtest our game for the first time just an hour and a half before the submission deadline and it was surprisingly bug-free! Except for the intended level of jank, that is. In fact, the only actual bug I've found so far was due to the few bits of mutable state I left in because I was strapped for time.
There's this ethos of making invalid states unrepresentable in typed functional programming, and that goes a long way in solving logic bugs in your game. Do give it a try if you're into functional programming and are working in an engine that lets you write code in a language with discriminated unions/variants/whatever you wanna call them. It just works!