#1 has workaround. #2 and #3 are not the limitation. #4 is the limitation in on-premise and online both.
#1
You heard the right thing that default GET request length is 255. It can be modified from web.config. Another workaround you can make POST request instead of GET request to get item. In that case you will have to pass a CAML query.
End-point
/_api/Web/Lists/getbytitle('List Name')/GetItems
Request Body
{
__metadata: {
type: "SP.CamlQuery"
},
ViewXml: 'CAML Query goes here'
}
#2
You heard the wrong thing. Bulk Insert / Update / Delete operations are possible using BATCH request. See following references for making BATCH request
Part 1 - SharePoint REST API Batching - Understanding Batching Requests
Part 2 - SharePoint REST API Batching - Exploring Batch Requests, Responses and Changesets
#3
Paging and filtering is also possible in same query. You can achieve it using following operators.
$filter
$top
Example
/_api/web/lists/getbytitle('List Name')/Items?$filter=Status eq 'Accepted'&$top=10
You will get next page url as __next
in your response.
Find more on paging and filter here.
#4
It is not possible in both environment (On-Premise and Online). But you can count items after getting the items.
Getting an ItemCount with filtering in SP2013 using REST api