It's been a long time since you asked this. I'm sorry no one has answered you until now. I'm sure you have moved on since, but in case anyone else finds this...
This is not currently something you can accomplish within Godot 3.X. Perhaps in 4? I am unsure. For the time being you can set the font through BBCode, as you noted. I would recommend creating a function that wraps your code in a BBCode tag. Maybe something like:
func font1(text: String) -> String:
return "[font=res://user interface/fonts/customfont1.tres]" + text + "[/font]"
Or, if you wanted something more dynamic you could do something like:
func set_font(text: String, font: String) -> String:
return "[font=" + font + "]" + text + "[/font]"
This would let you pass in the text and the font path. Of course, you could expand on this function to allow you to pass in a name as your "font" variable and have the function set the right path.
Lots of options and maybe more to come in 4!
Happy coding!