The key term is "ultrafinitism."
In one sense it's not hard to whip up such a system. Here's a straightforward, if naive, development of a semantics for arithmetic which basically follows your first sentence:
We pick some number, say x=10^80, to be our limit on the "actual natural numbers." With x in hand, given a sentence p in the language of arithmetic we re-interpret p by treating the quantifiers as ranging over 10^80 as opposed to over all natural numbers.
For example, the standard formalization of Goldbach's conjecture is basically as the following sentence (X):
Our new semantics is defined via a syntactic translation: to tell whether (X) is true in our new semantics, we ask whether the related sentence (Y) is true in our original "infinitary" semantics:
Note that this isn't exactly what you might expect (namely, "There are no Goldbach counterexamples <10^80"). However, this discrepancy vanishes under further examination since in the sense of our old semantics, the above (Y) is itself equivalent to the following sentence (Z):
the point being that all but one of the "boundings" involved in the translation above were actually redundant. So new-(X) is old-(Y) is old-(Z), or more clearly we as expected get:
Goldbach's conjecture (this is (X)) is true according to our new semantics with x=10^80 iff there is no counterexample to Goldbach below 10^80 (this is (Z)) in the sense of our old semantics.
This may look really really really pedantic at first, and it is, but it's important to demonstrate that this translation is in fact totally precise and something we can reason with.
(Incidentally, this general type of translation is so important in mathematical logic that it has a name - we generally talk about relativizing a formula to an appropriate fragment of a given structure.)
However, there are real problems here. First, not all math is directly about the natural numbers. How do we bring (say) measure theory into this context? Second, the choice of "bounding number" x was pretty arbitrary, yet obviously affects the resulting theory we get. But let's say we only care about basic number theory and we don't mind arbitrariness. Then we still face the ontological issue: our new semantics was defined using our old semantics (this was the (X)->(Y) translation above). Really it seems only satisfying if our new semantics is itself "developed below 10^80" in some sense. However, here we run into a complexity obstacle: very roughly, it takes more than k-many bits of information to describe the first k-many natural numbers. So while we can produce something which looks like what you're describing at first glance, it's not at all clear that anything satisfying has actually been done by doing so.
Of course this was only a very naive first step, and there are much more valuable approaches to take (see e.g. here or here). However, it is nevertheless the case, to my understanding at least, that at present we have no satisfactory "ultrafinitistic mathematics" (see the discussion here).