In the real world, differences in drivers and the level of ODBC support lessens the potential of ODBC:
Access, Delphi, and Visual Basic all support ODBC directly.
Under C++, such as Visual C++, you can use the C++ ODBC API.
       In Visual C++, you can use the CRecordSet class, which wraps the 
       ODBC API
       set within an MFC 4.2 class.  This is the easiest route if you are doing
       Windows C++ development under Windows NT.
      
" If I write an application for PostgreSQL can I write it using ODBC calls to the PostgreSQL server, or is that only when another database program like MS SQL Server or Access needs to access the data? "
The ODBC API is the way to go. For Visual C++ coding you can find out more at Microsoft's web site or in your Visual C++ documentation.
     Visual Basic and the other RAD tools have Recordset objects 
     that use ODBC
     directly to access data.  Using the data-aware controls, you can quickly
     link to the ODBC back-end database 
     (very quickly).
    
Playing around with MS Access will help you sort this out. Try using File->Get External Data.
Tip: You'll have to set up a DSN first.