Hi Davor, in my past experience I've defined wagtail pages for any page type that I want to have fields editable on the wagtail admin that are related only to this page. If I have anything that I'm using in multiple places sitewide and I still want to enable editing via the wagtail admin interface I would create a regular django model and decorate it with the @register_snippet decorator https://docs.wagtail.io/en/stable/topics/snippets.html
If it's a model that you don't think you'd need to have your content editors change, a regular django model could be fine and you'd manage that in the django-admin. That would be a decision that is made depending on the requirements of the project.
For your second question, I'm not as experienced with that, but I'd say if it's relevant to the page itself maybe it should be defined on the wagtail page model. If it's a field that you're sharing across models maybe the foreign key field to a different model makes more sense