I know that we can program the contract that sends ETH based on $USD if we use oracles. But isn’t there any way to achieve this without the third party?
The problem is that price of ETH in USD is based on what the market will pay for it. All pricing information comes from exchanges who have a dynamic sell/buy list, changing the price every second.
If you look at CoinMarketCap, you will see that the price of ETH on that site is determined by the price on multiple exchanges averaged out:
You would need an oracle to collect and send that data to your contract, unless you want to specify a fixed price for ETH/USD.