If you want to build upon gitbook() which is another output format, I think the right way would be like any rmarkdown output format: build a new one using the other one as base.
This can be done with output_format() function. In there you can add a post processor step that would run after gitbook one I believe, so the splitting and moving would have take place.
Did you try this way ?
Maybe some things are missing in this case, and indeed the files would have already moved in the output_dir.
So maybe you have tried that already.
Post splitting process is quite specific. Between building on top of existing output formats, or creating a new output format (that would do the splitting / building), I don't know which way is the better.
However, know that if you want the Knit button to work in a bookdown project, it relies on render_site(). You could then create a new website format, different than bookdown::bookdown_site() which could call render_book(), then do the post processing after that.
This would only require to change the site: YAML key with a custom site generator I believe.
At command, users would have to use rmarkdown::render_site() and not bookdown::render_book()
Would that be something interesting to you?