It is operating system specific. Some (old, or academic) OSes provide weird APIs for TCP/IP, and some OSes don't even do any networking. IIRC, Gnu Hurd has something else than sockets (and probably Fuschia also has something else).
In practice, Berkeley sockets are nearly a de facto standard (this was not always the case, e.g. TLI), at least on Unix-like and POSIX systems (and probably on Windows also) and when programming in C (or related stuff, notably C++).
And you could use higher-level libraries, e.g. MPI, 0mq, or protocol specific libraries (for HTTP, libcurl on client side, libonion on server side, ....) etc ..... They are generally built above sockets.
do all networking applications use sockets on some level?
On some supercomputers, you can also have InfiniBand (and perhaps a variant of MPI using that hardware without sockets, but with something else). etc... Sometimes they have some InfinBand specific address family for socket
....
(It is more than ten years that I didn't access any supercomputer, so I could be wrong for the details)
BTW, some consortia like FIWIRE or AUTOSAR define their own networking APIs (for niche markets or specific industries).
(perhaps such consortia are defining an API above sockets; I don't know them well enough; you need to check)
See also the libraries mentioned near the end of this answer.
If I want to write some client/server program that will run on two of my computers running either Linux or Windows, should I always think sockets first (or higher level protocol that uses sockets),
Certainly yes in practice. And I would often consider using some existing free software library above Berkeley sockets.