SMS is "expensive" anywhere in the world when counting $s/byte, it's not just the US. The reason is that you cannot simply do price comparison based on data-rates: it's a flawed top-level down approach ignoring very real concerns and constraints.
The reason for SMS being relatively expensive per byte is that it's actually a hack which allows us to send data over the global GSM control channel, not a regular phone-allocated voice/data-channel. This makes it's main carrier a very bandwidth constrained channel and SMS is second class traffic sent on a as-available basis, but with queued on demand push-reception for the recipient.
Your data-traffic however has a dedicated channel, realtime priority, and realtime constraints, and it would need to go trough a intermediate service which can queue it if the receiver is not there. And the recipient would have to have an always on data-connection polling for incoming messages, draining your battery, much like Email push-notification does on modern smartphones.
In other words: Data and SMS are fundamentally different services, operating with fundamentally different channels and technologies. Your OSI-minded application-level analysis is incomplete.
True, this might not make much difference to the end-user of the service provided, but there are technical reasons for why SMS and data is treated and priced differently.
As long as SMS is a defined standard as it is now, and that standard involves piping shit trough the GSM control channel and not using data (something you don't want when roaming abroad), the fact that they are priced differently is perfectly reasonable. If the price-difference itself is reasonable is another debate all together.