The very concept of sets exists to avoid your worries.
We can formalize properties using a programming language. Specify some basic operations you are allowed to perform on objects (depending on context, these could be set inclusion, addition, …). Then any syntactically correct use of these operations is a so-called "atomic" property; any finite combination of atomic properties using "and (${\wedge}$)" and "or (${\vee}$)" is also a property. If you want, you can also use infinite combinations of atomic properties too (but see below), or allow yourself to introduce "local variables" using the existential (${\exists}$) and universal (${\forall}$) quantifiers.
For example, allow yourself to use addition, multiplication, and quantifiers, and assume all values are integers; then one can immediately write down a property to test for "is prime": $$\text{prime}(p)=(\forall a,b)((ab\neq p)\vee(a\cdot a=a)\vee(b\cdot b=b))$$ "$n$ is an even number that cannot be written as the sum of two primes" can then be written as $$\phi(n)=(\exists q)(q+q=n)\wedge(\forall p,q)(\neg\text{prime}(p)\vee\neg\text{prime}(q)\vee p^2+q^2\neq n)$$
But the programming-based approach leads to trouble. Suppose $\phi$ is a property. Then any proposition about $S=\{x:\phi(x)\}$ is implicitly a proposition about $\phi$:
- "$x\in S$" is the same as "$\phi(x)$"
- "$S$ is uncountable" is the same as "uncountably many points satisfy $\phi$"
- "$S$ is closed" is the same as "$\phi$ is preserved under limit operations"
- etc.
So why bother with sets at all? Because, as you fear, some properties are hard to write down. Instead, we try to construct a system which doesn't require them to be written down at all.
A set is defined as an object $O$, such that, for any other object $x$, either $x\in O$ is true, or it is false. One way to decide which of these propositions holds is to use a rule: $$x\in O\Leftrightarrow \phi_O(x)$$ where $\phi_O$ is some property. But a rule is not required.
If your "programming language" is sufficiently rich, using sets doesn't actually save you anything; one can define $\phi_O(x)=(x\in O)$. Even if you don't allow use of ${\in}$, you still can just write down all the elements and call that a "property": $$\phi_O(x)=\left(\bigvee_{y\in O}{y=x}\right)$$ But for this reason, most mathematical logicians try to use programming languages that allow neither trick, and then one can prove via an elementary cardinality argument that there must exist sets without a corresponding property.